React 在渲染方法中执行深比较还是浅比较?

Eth*_*alm 8 reactjs

反应文件说

React.PureComponent 的 shouldComponentUpdate() 只是对对象进行浅层比较。

这是否意味着 Component 将进行深度比较,除非我们将其设为 PureComponent ?

pwo*_*laq 6

不,默认情况下Component会重新渲染,即使其道具保持不变(根本不进行比较),除非您决定实现自己的shouldComponentUpdate.

文档

如果 shouldComponentUpdate() 返回 false,则不会调用 render()。

进而:

当接收到新的 props 或 state 时, shouldComponentUpdate() 在渲染之前被调用。默认为真。

  • @DrakeXiang 除非它是 `PureComponent`,它将在每次父更改时构造一个 VirtualDOM 树。如果组件的 props 没有变化,它会看到新旧 VirtualDOM 树没有区别,因此它不会执行任何实际的 DOM 更新。 (2认同)