【发布时间】:2020-01-17 12:53:41
【问题描述】:
我从数据库中随机获取了 5 张照片(gif)。我已经声明了pressedGif,它定义了点击的照片的索引。我想为它们中的每一个添加 onclick 事件(在 for 循环中):
export default function GameObject(props) {
const addedToGameGif = [];
const PhotoCards = [];
const [pressedGif, gifPressed] = useState(-1);
useEffect(() => {
console.log('HELLO');
}, []);
// get random photos to addedToGameGif array
// ...
for (let i = 0; i < addedToGameGif.length; i += 1) {
PhotoCards.push(
<div>
<Card
id={i}
onClick={() => gifPressed(i)}>
<img src={addedToGameGif[i]} />
</Card>
</div>,
);
}
return <div>{PhotoCards}</div>;
}
我在控制台中成功收到 HELLO 消息,但问题是我随机挑选的照片也变成了不同的照片。那么如何防止照片重新加载和调用随机选择照片的函数呢?
【问题讨论】:
-
gifPressed正在导致状态更改,这反过来又会每次都调用您的// get random photos to addedToGameGif array。一种选择是将PhotoCards存储在内部状态,并检查长度是否为 0,然后仅创建数组。 -
请添加从数据库中获取图像的代码。
-
别忘了将 key 添加到子数组中,这就是 react 知道每个不同子元素的方式。
-
感谢@Keith,将数组声明移动到状态有帮助。
标签: reactjs react-hooks use-effect use-state