reactjs - setInterval 中的 setState 未按预期工作。任何想法为什么?
问题描述
我想每 2 秒更新一次状态并渲染一些图像 这绝对没问题
useEffect(() => {
setTimeout(() => {
if (workImages.currentIndex > workImages.items.length - 2) {
setWorkImages({ ...workImages, currentIndex: 0 });
} else {
setWorkImages({
...workImages,
currentIndex: ++workImages.currentIndex,
});
}
}, 2000);
}, [workImages]);
这仅适用于其他情况
useEffect(() => {
setInterval(() => {
if (workImages.currentIndex > workImages.items.length - 2) {
setWorkImages({ ...workImages, currentIndex: 0 });
} else {
setWorkImages({
...workImages,
currentIndex: ++workImages.currentIndex,
});
}
}, 2000);
}, []);
谁能解释为什么?
解决方案
第一个示例有效,因为它侦听 workImages。因此,每次 workImages 更改时,您都会使用 setWorkImages 设置一个新图像。
第二个示例仅在加载页面时触发ONCE 。
有关 useEffect 的更多信息,请查看此处:https ://reactjs.org/docs/hooks-effect.html
推荐阅读
- python-3.x - 即使我没有使用数组,Python3 也会触发数组错误。可能我的语法错误,但我没有找到错误
- java - Android - API 响应返回 OK,但列表为空
- python-2.7 - 如何使用 PyAutoGUI 检测按键事件?
- powershell - powershell 参数命令行菜单
- python - 从 Pandas 系列列表中删除元素
- racket - RackUnit check-eq?对相等的字符串返回 false
- html - 如何禁用表格Angular JS中特定行上的按钮
- c# - 使用 httpclient 在 C# 中获取和发布请求的反馈和可能的更好方法
- python - spyder中的IPython控制台在Anaconda中非常慢
- java - 使用 bundle 使用 firestore 将数据从一个移动到另一个时,Android 应用程序崩溃