javascript - React 是否会在卸载时自动清除间隔?
问题描述
我正在开始一个区间 on componentDidMount
,存储返回的区间 id,然后使用clearInterval
on componentWillUnmount
,我想知道这是否有必要。
当组件卸载时,是否有垃圾收集类型的东西会终止间隔?我知道它会在硬刷新时杀死它,但想知道 SPA。
解决方案
不。
按照设计, asetInterval()
永远不会被自动清除(除非您编写一个在内部处理此问题的自定义函数)。
当您使用 创建一个区间时setInterval()
,您实质上是在说您希望定期运行一个函数,而不管创建区间的范围如何。即使间隔是在任何地方都无法访问的范围内创建的,间隔仍将运行,因为间隔的生命周期不依赖于它正在运行的范围。
出于这个原因,务必始终清除间隔以防止函数在每次挂载时堆积,这将导致内存泄漏和可能意外的副作用,因为您将在一个间隔上运行多个函数,每个函数都在做同样的事情。
推荐阅读
- php - Laravel imagecopy 降低图像质量
- inno-setup - Inno Setup - 如何使用由 [files] 目标中的 msgbox 选择定义的用户选择目录
- windows - 注销服务器时任务计划程序作业失败
- lua - 飞溅:无法查看网页内容
- microservices - 在 MasstTransit 中发送、发布和请求/响应
- python - python模块可以在完全独立的目录之间拆分吗?
- rest - 如果条目的序数未知,如何使用 json-server(或类似的 REST API)正确“修补”特定条目?
- r - 如何在 Linux 上为 RSelenium 设置 phantomJS
- postgresql - 通过加入两个关联表来连接数据会引发重复 - Postgresql
- typescript - 如何根据在 monorepo 上的使用位置将别名指向不同的位置