有人知道窗口事件监听器应该持续多长时间吗?
我的初步想法是,任何附加到文档的监听器在页面重新加载后可能会丢失,而我希望那些附加到窗口对象上的监听器能够在页面重新加载后保持。
然而,测试似乎表明当页面重新加载时,所有的事件监听器都被销毁了,这是正确的吗?
有人知道窗口事件监听器应该持续多长时间吗?
我的初步想法是,任何附加到文档的监听器在页面重新加载后可能会丢失,而我希望那些附加到窗口对象上的监听器能够在页面重新加载后保持。
然而,测试似乎表明当页面重新加载时,所有的事件监听器都被销毁了,这是正确的吗?
只要以下条件之一满足,元素上的事件监听器就会持久存在:
它们没有被移除。
元素继续存在。
重新加载页面将销毁页面当前的元素,并从头开始构建新元素,因此事件监听器无法幸存。 (它还会摧毁与页面关联的JavaScript环境,所以如果处理程序在该环境中,它们也会停止存在。)
innerHTML
),处理程序仍然会断开连接。 - T.J. CrowderonXyz
属性进行操作,则不需要。如果您实际上使用了addEventListener
(例如,在componentDidMount
中),则最好使用removeEventListener
(例如,在... - T.J. CrowdercomponentWillUnmount
生命周期方法中移除事件处理程序并不是必须的。但是,你无法确定元素是否会被移除,因此最好还是移除事件处理程序。 - T.J. Crowder