精确的setState挂钩在setInterval内不起作用

时间:2019-04-26 02:48:41

标签: asynchronous state setinterval react-hooks preact

CodeSandbox
尝试在useState的{​​{1}}内部setInterval。这是行不通的,看起来好像每次迭代都在执行以前的调用栈(?)。有人可以帮助我理解并帮助我修复此代码段吗?

preact/hook

2 个答案:

答案 0 :(得分:2)

您需要使用setTimeout。 setInterval永远不会被取消,因此每个渲染器都会添加一个新的1s重复计时器。这是您的沙箱,有两种固定方式(<img/>或使用setTimeout在挂载上安装重复计时器)

https://codesandbox.io/s/vy0ww725j0

答案 1 :(得分:1)

useEffect(无依赖项[])将充当componentDidMount来装入我们的间隔,并且我们可以返回一个函数来调用unmount,我们应清除uninterval以免发生内存泄漏。

useEffect(() => {
  const id = setInterval(() => {
    setCount(c => c + 1);
  }, 1000);
  return () => clearInterval(id);
}, []);