当调用 setState
时,React会做的第一件事情是将传递给 setState
的对象合并到组件的当前状态。这将启动一个称为和解(reconciliation
)的过程。和解(reconciliation
)的最终目标是以最有效的方式,根据这个新的状态来更新UI。 为此,React将构建一个新的 React 元素树(您可以将其视为 UI 的对象表示)。
一旦有了这个树,为了弄清 UI 如何响应新的状态而改变,React 会将这个新树与上一个元素树相比较( diff
)。
通过这样做, React 将会知道发生的确切变化,并且通过了解发生什么变化,只需在绝对必要的情况下进行更新即可最小化 UI 的占用空间
在生命周期方法 shouldComponentUpdate
中,允许我们选择退出某些组件(和他们的子组件)的 reconciliation
过程。
如上所述,“和解( reconciliation
)的最终目标是以最有效的方式,根据新的状态更新用户界面”。如果我们知道我们的用户界面(UI)的某一部分不会改变,那么没有理由让 React 很麻烦地试图去弄清楚它是否应该渲染。通过从 shouldComponentUpdate
返回 false,React 将假定当前组件及其所有子组件将保持与当前组件相同。