无法使用setInterval在已卸载的组件上执行React状态更新

时间:2019-12-28 17:07:12

标签: reactjs react-hooks setinterval

我尝试在setState函数中进行setInterval并得到:

  

无法在未安装的组件上执行React状态更新。

有帮助吗?

useEffect(() => {
  NewTimer()
}, [])

const NewTimer = () => {
  let count = 0
  let timer = setInterval(() => {
    count++
    if (count === 10) {
      clearInterval(timer);
    }
    setCounter(count)
  }, 1000);
}

1 个答案:

答案 0 :(得分:0)

这可能是因为虽然卸载了组件,但间隔正在运行(我不知道它是否安装了,但是可能)。我建议您这样做:

useEffect(() => {
  let count = 0
  let timer = setInterval(() => {
    count++
    if (count === 10) {
      clearInterval(timer);
    }
    setCounter(count)
  }, 1000);

  return () => {
    clearInterval(timer);
  }
}, [])

卸载组件时,将调用useEffect回调函数中返回的函数。该代码只是清除了卸载组件的时间间隔。