在此React page上,它表示您需要手动调用unmountComponentAtNode
,因为:
这很重要,经常被遗忘。忘了打电话 unmountComponentAtNode将导致您的应用程序泄漏内存。
我有一个应用程序,它反复将属性传递给根组件并调用ReactDOM.render
。我是否需要为容器元素调用unmountComponentAtNode
以防止"内存泄漏",无论这意味着什么?
我已经尝试过这样做并注意到它导致所有子组件的重新安装,而在没有ReactDOM.render
的情况下调用unmountComponentAtNode
似乎做了差异并且没有安装任何儿童组件。
所以可以在没有ReactDOM.render
的情况下致电unmountComponentAtNode
吗?这会导致任何内存泄漏吗? this page在ReactDOM.render
下显示:
如果ReactElement先前已经渲染到容器中,那么这将是 对它执行更新,只在必要时改变DOM 反映最新的React组件。 ReactDOM.render()控制您传递的容器节点的内容 in。第一次调用时,里面的任何现有DOM元素都会被替换。 后来的调用使用React的DOM diffing算法进行有效的更新。
它没有提到任何副作用。
修改:
我使用Chrome做了一些简单的任务,我使用带有/不带ReactDOM.render
的1个简单组件调用unmountComponentAtNode
100万次。根据Chrome任务管理器的说法,该页面大约需要5秒钟才能完成而没有它冻结并消耗10倍(我停止了它因为它冻结了我的窗口)。因此,当证据显示使用unmountComponentAtNode
可能会导致内存泄漏时,不确定它们是什么意思防止内存泄漏。
答案 0 :(得分:5)
ReactDOM.render
可用于使用新道具更新顶级组件。这是一个完全可以接受的用途。 unmountComponentAtNode
的用途是从DOM中删除组件的顶级DOM节点。否则,由于React对它的引用,DOM节点将被保留,因此内存泄漏。