首页 > 解决方案 > React 是否会在卸载时自动清除间隔?

问题描述

我正在开始一个区间 on componentDidMount,存储返回的区间 id,然后使用clearIntervalon componentWillUnmount,我想知道这是否有必要。

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

标签: javascriptreactjs

解决方案


不。

按照设计, asetInterval()永远不会被自动清除(除非您编写一个在内部处理此问题的自定义函数)。

当您使用 创建一个区间时setInterval(),您实质上是在说您希望定期运行一个函数,而不管创建区间的范围如何。即使间隔是在任何地方都无法访问的范围内创建的,间隔仍将运行,因为间隔的生命周期不依赖于它正在运行的范围。

出于这个原因,务必始终清除间隔以防止函数在每次挂载时堆积,这将导致内存泄漏和可能意外的副作用,因为您将在一个间隔上运行多个函数,每个函数都在做同样的事情。


推荐阅读