CodeSandbox
尝试在useState
的{{1}}内部setInterval
。这是行不通的,看起来好像每次迭代都在执行以前的调用栈(?)。有人可以帮助我理解并帮助我修复此代码段吗?
preact/hook
答案 0 :(得分:2)
您需要使用setTimeout。 setInterval永远不会被取消,因此每个渲染器都会添加一个新的1s重复计时器。这是您的沙箱,有两种固定方式(<img/>
或使用setTimeout
在挂载上安装重复计时器)
答案 1 :(得分:1)
useEffect
(无依赖项[]
)将充当componentDidMount来装入我们的间隔,并且我们可以返回一个函数来调用unmount,我们应清除uninterval以免发生内存泄漏。>
useEffect(() => {
const id = setInterval(() => {
setCount(c => c + 1);
}, 1000);
return () => clearInterval(id);
}, []);