this.state与useState的setTimeout
当我使用类组件时,我有代码:
setTimeout(() => console.log(this.state.count), 5000);
当我使用钩子时:
const [count, setCount] = useState(0);
setTimeout(() => console.log(count), 5000);
如果我触发setTimeout然后count在超时 ( 5000ms)之前将更改为 1 ,类组件将console.log(1)(最新值),并且useState是console.log(0)(注册超时时的值)。
为什么会发生这种情况?
回答
对于useState,它会count在第一次使用时创建超时。它count通过 a访问该值closure。当我们通过 设置新值时setCount,组件会重新渲染但不会更改传递给 timeout 的值。
我们可以使用const count = useRef(0)并传递给 timeout count.current。这将始终使用最新的计数值。
查看此链接以获取更多信息。