当通过调用 setState 更新组件时,React 是在整个 DOM 树上运行差异算法,还是仅在属于更新组件的部分上运行?
例如,如果我的应用程序中有 10000 个组件并在没有子组件(它是树的叶子)中调用 setState,React 将遍历整个大型 DOM 树(这会很慢)还是仅遍历 DOM 树由组件生成(这会快很多)?
当通过调用 setState 更新组件时,React 是在整个 DOM 树上运行差异算法,还是仅在属于更新组件的部分上运行?
例如,如果我的应用程序中有 10000 个组件并在没有子组件(它是树的叶子)中调用 setState,React 将遍历整个大型 DOM 树(这会很慢)还是仅遍历 DOM 树由组件生成(这会快很多)?
不,当您仅在叶节点上调用 setState 时,React 不会遍历整个树。
在调用 setState 时,react 只会重新渲染调用了 setState 的组件(树节点)和任何子组件(节点)。应该注意的是,React 只会更新 DOM,如果实际上存在从调用 setState 中要表示的更改。
Vjeux 是 React 团队的成员之一,他写了一篇很好的博客文章,详细介绍了 react diff 算法是如何工作的,以及在调用 setState 时它是如何工作的。这是链接。