React会在卸载时自动清除间隔吗?

时间:2019-02-15 16:28:06

标签: javascript reactjs

我正在componentDidMount上开始一个间隔,存储返回的间隔ID,并在clearInterval上使用componentWillUnmount,我想知道这是否有必要。

是否有垃圾回收类型的东西会在组件卸载时杀死间隔?我知道它会在一次硬刷新后杀死它,但是想知道SPA。

3 个答案:

答案 0 :(得分:2)

否。

根据设计,setInterval()永远不会自动清除(除非您编写一个内部处理此功能的自定义函数)。

使用setInterval()创建间隔时,实际上是在说要以规则的间隔运行函数,而不管间隔的创建范围。即使该间隔是在无法从任何地方访问的合并范围中创建的,该间隔仍将运行,因为该间隔的寿命与运行该范围的范围无关。

因此,务必清除间隔以防止函数在每次安装时堆积,这很重要,因为这将导致内存泄漏和可能的意外副作用,因为您将在间隔上运行多个函数,每个函数都在执行同样的事情。

答案 1 :(得分:1)

有必要在clearIntervalcomponentDidUnmount。随着React中钩子的引入,这个冗长乏味的过程将间隔存储在成员变量中,随后清除它变得非常容易。现在,您可以在useEffect中返回一个函数,以清除创建的间隔,如下所示:

React.useEffect(() => {
  const interval = setInterval(() => console.log("something"));

  return () => clearInterval(interval);
});

Please refer to the documentation了解更多信息。

答案 2 :(得分:-2)

我没有查过,但是我不这么认为。因为React无法知道您已经初始化了setInterval。我建议您清除它。