反复调用ReactDOM.render和内存泄漏

时间:2016-02-11 10:53:43

标签: reactjs

在此React page上,它表示您需要手动调用unmountComponentAtNode,因为:

  

这很重要,经常被遗忘。忘了打电话   unmountComponentAtNode将导致您的应用程序泄漏内存。

我有一个应用程序,它反复将属性传递给根组件并调用ReactDOM.render。我是否需要为容器元素调用unmountComponentAtNode以防止"内存泄漏",无论这意味着什么?

我已经尝试过这样做并注意到它导致所有子组件的重新安装,而在没有ReactDOM.render的情况下调用unmountComponentAtNode似乎做了差异并且没有安装任何儿童组件。

所以可以在没有ReactDOM.render的情况下致电unmountComponentAtNode吗?这会导致任何内存泄漏吗? this pageReactDOM.render下显示:

  

如果ReactElement先前已经渲染到容器中,那么这将是   对它执行更新,只在必要时改变DOM   反映最新的React组件。   ReactDOM.render()控制您传递的容器节点的内容   in。第一次调用时,里面的任何现有DOM元素都会被替换。   后来的调用使用React的DOM diffing算法进行有效的更新。

它没有提到任何副作用。

修改: 我使用Chrome做了一些简单的任务,我使用带有/不带ReactDOM.render的1个简单组件调用unmountComponentAtNode 100万次。根据Chrome任务管理器的说法,该页面大约需要5秒钟才能完成而没有它冻结并消耗10倍(我停止了它因为它冻结了我的窗口)。因此,当证据显示使用unmountComponentAtNode可能会导致内存泄漏时,不确定它们是什么意思防止内存泄漏。

1 个答案:

答案 0 :(得分:5)

ReactDOM.render可用于使用新道具更新顶级组件。这是一个完全可以接受的用途。 unmountComponentAtNode的用途是从DOM中删除组件的顶级DOM节点。否则,由于React对它的引用,DOM节点将被保留,因此内存泄漏。