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)(最新值),并且useStateconsole.log(0)(注册超时时的值)。
为什么会发生这种情况?

回答

对于useState,它会count在第一次使用时创建超时。它count通过 a访问该值closure。当我们通过 设置新值时setCount,组件会重新渲染但不会更改传递给 timeout 的值。
我们可以使用const count = useRef(0)并传递给 timeout count.current。这将始终使用最新的计数值。
查看此链接以获取更多信息。


以上是this.state与useState的setTimeout的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>