【发布时间】:2021-12-03 05:19:05
【问题描述】:
我对 Typescript 还是很陌生,我正在尝试将我在 Reactjs 上的一个组件迁移到 typescript。这个组件应该接收一个 0-10 的数字作为道具,并根据该数字填充一个带有 stars 组件的数组,这些组件是我从 React 图标导入的图标。一旦数组被填充,然后由组件呈现。 但是当我尝试将这些元素推送到 Array 打字稿时会抛出一个错误,好像这些元素既不是 Element 类型也不是 Jsx。 我发现它工作的唯一方法是设置
let starsArray: Element[] | any = [];
但我的想法是不要将任何东西保留为“任何”类型;
import React, { useState, useEffect } from "react";
import { BsStarFill } from "react-icons/bs";
interface PropsInterface {
stars: number;
big?: boolean;
}
const Stars: React.FC<PropsInterface> = ({ stars, big }) => {
const [array, setArray] = useState<Element[]>([]);
useEffect(() => {
let starsArray: Element[] = [];
let starsAmount: number = Math.round(stars) / 2; //gets rating from props and turns it into integer divided by two (ratings were 1-10 and we needed 1-5 stars);
for (let i = 0; i < 5; i++) {
//goes throught 1-5 and if the rating amount is higher or equal on each iteration it pushes a filled star component to starsArray, else it pushes an empty star
if (starsAmount > i) {
starsArray.push(<BsStarFill className="star--filled" key={i} />);
} else {
starsArray.push(<BsStarFill className="star--unfilled" key={i} />);
}
}
setArray(starsArray);
}, []);
return (
<div className={big ? "stars --bigstars" : "stars"}>
{Object.values(array).map((each) => each)}
</div>
);
};
export default Stars;
这些用红色下划线显示错误的行
(<BsStarFill className="star--unfilled" key={i} />)
(<BsStarFill className="star--filled" key={i} />)
这是完整的错误:
“JSX.Element”类型的参数不能分配给“Element”类型的参数。
类型“ReactElement
非常感谢您的帮助,谢谢!
【问题讨论】:
标签: arrays reactjs typescript components react-typescript