【发布时间】:2021-09-24 02:29:22
【问题描述】:
我正在使用 React 制作纸牌游戏,由于某种原因,我收到了 TypeError: Cannot read property 'img' of undefined。
导致错误的代码:
import React, { useState } from "react";
import Card from "./components/Card";
const App = () => {
const [cards, setCards] = useState([
{
name: "King",
img: "https://image.freepik.com/free-vector/king-crown-esport-logo-design_177315-269.jpg",
pts: 10000,
},
{
name: "Minister",
img: "https://i.pinimg.com/474x/51/59/b3/5159b321713edef6c6a3b8f930f667a1.jpg",
pts: 5000,
},
{
name: "Cop",
img: "https://image.shutterstock.com/image-vector/police-officer-badge-icon-vector-260nw-613493573.jpg",
pts: 100,
},
{
name: "Thief",
img: "https://images1.livehindustan.com/uploadimage/library/2019/05/03/16_9/16_9_1/thief_symbolic_photo__1556892712.jpg",
pts: 0,
},
]);
const [shuffledCards, setShuffledCards] = useState([]);
for (let i = 0; i < 4; i++) {
const randCard = cards[Math.floor(Math.random() * (cards.length + 1))];
setShuffledCards([...shuffledCards, randCard]);
setCards(cards.filter((c) => c !== randCard));
}
return (
<div style={{ display: "flex", flexDirection: "row" }}>\
{shuffledCards.map((c) => (
<Card img={c.img} name={c.name} pts={c.pts} />
))}
</div>
);
};
export default App;
项目链接(在线 Gitpod.io)-https://purple-salmon-uy3kza3n.ws-us10.gitpod.io/?folder=vscode-remote%3A%2F%2Fsapphire-quokka-1i5clgk7.ws-us09.gitpod.io%3A443%2Fworkspace(注意它可能会改变,一些奇怪的 gitpod 事情)
现在,当我在 for 循环中打印 shuffledCards 数组时,经过一些循环后,我注意到一个未定义的对象被添加到数组中。我认为这是问题所在,我不知道为什么或如何发生,以及如何解决它。
期待您的来信。提前谢谢你。
【问题讨论】:
-
您希望什么时候洗牌?当前,您正在尝试在每次组件呈现时执行此操作。在 state 中存储 2 个数组有点多余,只需存储一个并在生命周期挂钩中对其进行 shuffle。
-
@DrewReese 你认为这会修复错误吗?
-
@DrewReese 我是 React 和 JavaScirpt 的新手,你能告诉我该怎么做吗?
标签: reactjs react-hooks undefined typeerror