我正在componentDidMount
上开始一个间隔,存储返回的间隔ID,并在clearInterval
上使用componentWillUnmount
,我想知道这是否有必要。
是否有垃圾回收类型的东西会在组件卸载时杀死间隔?我知道它会在一次硬刷新后杀死它,但是想知道SPA。
答案 0 :(得分:2)
否。
根据设计,setInterval()
永远不会自动清除(除非您编写一个内部处理此功能的自定义函数)。
使用setInterval()
创建间隔时,实际上是在说要以规则的间隔运行函数,而不管间隔的创建范围。即使该间隔是在无法从任何地方访问的合并范围中创建的,该间隔仍将运行,因为该间隔的寿命与运行该范围的范围无关。
因此,务必清除间隔以防止函数在每次安装时堆积,这很重要,因为这将导致内存泄漏和可能的意外副作用,因为您将在间隔上运行多个函数,每个函数都在执行同样的事情。
答案 1 :(得分:1)
有必要在clearInterval
上componentDidUnmount
。随着React中钩子的引入,这个冗长乏味的过程将间隔存储在成员变量中,随后清除它变得非常容易。现在,您可以在useEffect
中返回一个函数,以清除创建的间隔,如下所示:
React.useEffect(() => {
const interval = setInterval(() => console.log("something"));
return () => clearInterval(interval);
});
答案 2 :(得分:-2)
我没有查过,但是我不这么认为。因为React无法知道您已经初始化了setInterval。我建议您清除它。