考虑以下情况:
dangerouslySetInnerHtml
道具添加到React组件。然后我使用ref
提供的逃生舱来访问已安装的React组件。
let foo = this.refs.foo;
并向该已安装组件内的DOM元素添加事件侦听器
foo.querySelector('a').addEventListener('click', callback, true);
问题在卸载组件时,React会自动删除此事件侦听器,还是需要在componentWillUnmount
中手动执行此操作?我无法想象为什么React不会将它与它添加的DOM节点一起删除,但我找不到任何支持或反驳我的直觉的引用。
您怎么看?
答案 0 :(得分:1)
现代浏览器将收集已删除DOM元素的事件处理程序。
但是如果你在某个地方持有该DOM元素的引用,那么浏览器就无法收集事件处理程序并导致内存泄漏。
所以最安全的方法是删除componentWillUnmount
中的所有事件处理程序。