为什么 React 在重新渲染之前不比较 Previous State 和 New State?为什么调用setState时总是渲染?

sha*_*nya 7 reactjs

如果 React 在重新渲染之前比较(浅)前一个状态和下一个状态,它将减少许多渲染,这有助于优化性能。

根据React 文档,当调用 setState 方法时,React 总是渲染组件及其子组件。React 应该巧妙地处理组件及其子组件不需要的重新渲染。

Shu*_*tri 5

React 可以与不可变或纯 Javascript 数据一起使用。React 确实提供了一个生命周期钩子(shouldComponentUpdate),您可以选择使用它来防止重新渲染。然而,对于普通的 Javascript 数据,有时比较数据并决定是否重新渲染数据可能会产生开销,因为可能会发生这样的情况:为了检查数据更改,您可能需要深入比较数据并在在最常需要重新渲染的情况下,React 必须在比较状态后更新 DOM,这可能比简单的虚拟 DOM 比较和更新成本更高。

话虽这么说,您可以在快速决定是否重新渲染或不使用PureComponent和/或ImmutableJS数据实际渲染之间进行权衡。