【发布时间】:2021-04-02 04:17:29
【问题描述】:
我做了一些对我的情况有好处的事情,但我不明白它是如何工作的,我很乐意解释 cmets。
- 我尝试执行每 5 秒更改一次背景图像的功能。
1.我的第一次尝试是: (例如,我有包含 3 个图像的 mainImages 数组。)
const [index, setIndex] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setIndex(index+1)
(index > mainImages.length-1)? console.log("Bigger",index):console.log("smaller","i="i)
}, 5000);
return () => clearInterval(interval);
}, []);
- 在这种情况下。 每 5 秒我得到 -"smaller",i=0 - 对于每个间隔,即使在 3 个或更多间隔之后 奇怪的部分:图像的变化如预期。甚至索引仍然是 0。
2.我的第二次尝试:我在索引和图像中也得到了我期望的结果。
-
我把 [index] 设置为使用 effect sec 参数之间的唯一变化。
useEffect(() => { thesame.... }, [index]); -
在这种情况下。 每 5 秒我就会得到正确的控制台(
每 5 秒我得到 -"smaller",i=0
"smaller",i=1 "smaller",i=2 "Bigger",i=3.......
所以我的问题:幕后发生了什么,它的影响如何?它是如何工作的?
【问题讨论】:
-
当你给 setInterval 回调函数时,它使用索引状态的快照,它不会每 5 秒改变一次。所以你每次都会得到相同的索引。将
index添加到依赖数组时,每次更新索引时都会调用钩子,因此在interval的回调函数中得到正确的索引。
标签: reactjs react-native react-hooks use-effect