是否需要手动删除手动添加到React组件中的元素的事件侦听器?

时间:2017-01-13 09:42:06

标签: reactjs

考虑以下情况:

  • 我有一段(安全)HTML,我在js模块中导入并使用dangerouslySetInnerHtml道具添加到React组件。
  • 然后我使用ref提供的逃生舱来访问已安装的React组件。

    let foo = this.refs.foo;

  • 并向该已安装组件内的DOM元素添加事件侦听器

    foo.querySelector('a').addEventListener('click', callback, true);

问题在卸载组件时,React会自动删除此事件侦听器,还是需要在componentWillUnmount中手动执行此操作?我无法想象为什么React不会将它与它添加的DOM节点一起删除,但我找不到任何支持或反驳我的直觉的引用。

您怎么看?

1 个答案:

答案 0 :(得分:1)

现代浏览器将收集已删除DOM元素的事件处理程序。

但是如果你在某个地方持有该DOM元素的引用,那么浏览器就无法收集事件处理程序并导致内存泄漏。

所以最安全的方法是删除componentWillUnmount中的所有事件处理程序。