【发布时间】:2021-12-19 23:09:56
【问题描述】:
我的代码中有一个名为“url”的组件的图像列表。我还有一个名为currImageIndex 的状态变量。我想要发生的是每次渲染这个组件时,我想启动一个计时器。该计时器运行的每一秒,我都想增加我的状态变量currImageIndex。当currImageIndex + 1 大于或等于url 长度时,我想将currImageIndex 重置为零。总体目标是通过返回<img src={url[currImageIndex]}> 来模拟图像的自动幻灯片。但是,我在增加状态变量时遇到问题。我遵循了一些我在这里找到的代码,但我不知道如何让增量工作。这是我的代码。
const { url } = props;
const [currImageIndex, setCurrImageIndex] = useState(0);
console.log(url)
const increment = () => {
console.log(url.length)
console.log(currImageIndex)
if (currImageIndex + 1 < url.length) {
setCurrImageIndex((oldCount) => oldCount + 1)
}
else {
setCurrImageIndex(0)
}
}
useEffect(() => {
const id = setInterval(increment, 1000);
return () => clearInterval(id);
}, []);
return (
<div className={styles.container}>
<div className={styles.header}>Preview of GIF:</div>
<img src={url[currImageIndex]} alt="GIF Preview" className={styles.image} />
<div>{currImageIndex}</div>
</div>
);
当我使用大小为 2 的 url 运行此程序时,倒数第三行 ("{currImageIndex}") 显示 1,然后是 2,然后是 3,依此类推。它永远不会重置。我的console.log(url.length) 打印 2,我的 console.log(currImageIndex) 打印 0。我想要发生的是 currImageIndex 应该是 0、1、0、1、0、1,.... 谁能帮我理解我在做什么错误的?谢谢!
【问题讨论】:
标签: javascript reactjs react-hooks use-effect use-state