Javascript shouldComponentUpdate和内置差异之间的区别

Javascript shouldComponentUpdate和内置差异之间的区别,javascript,reactjs,Javascript,Reactjs,我知道如果shouldComponentUpdate()返回false,它将阻止调用render()方法。 如果我在render()方法中使用了一些昂贵的逻辑,那么shouldComponentUpdate()是一件非常有用的事情,因为我可以阻止render()调用 但是如果我的render()方法只返回元素,而不执行任何昂贵的代码,该怎么办呢 shouldComponentUpdate()中的比较(以PureComponent的实现为例)和render()调用时的内置React diffing

我知道如果
shouldComponentUpdate()
返回false,它将阻止调用
render()
方法。 如果我在
render()
方法中使用了一些昂贵的逻辑,那么
shouldComponentUpdate()
是一件非常有用的事情,因为我可以阻止
render()
调用

但是如果我的
render()
方法只返回
元素
,而不执行任何昂贵的代码,该怎么办呢


shouldComponentUpdate()
中的比较(以PureComponent的实现为例)和
render()
调用时的内置React diffing之间有什么区别吗?

我认为这里写的很好:


主要区别在于React.PureComponent对旧道具和新道具以及旧状态和新状态进行了粗略的比较,但内置的React diffing(协调)简单地比较了新旧DOM树,但请阅读上面的这篇文章,它将解决您的疑问。

React告诉您在最大情况下避免,这将导致性能问题。 React在更新组件元素方面非常聪明,在需要的地方使用
,React将匹配更新并更新DOM。React本身会比较以前的道具和新道具,并更新dom

使用shouldComponentUpdate()让React知道组件的输出 不受当前状态或道具更改的影响。默认值 行为是在每一个状态改变时重新呈现的,并且在广阔的空间中 大多数情况下,您应该依赖默认行为

根据react,仅当状态更改时,组件才会重新渲染

此方法仅作为性能优化存在。不要依赖 它可以“阻止”渲染,因为这可能会导致错误。考虑使用 内置的PureComponent而不是编写shouldComponentUpdate() 手工PureComponent对道具和 状态,并减少跳过必要更新的机会

资料来源:

如果你仍然想使用它,你需要衡量它的下行和上行。我认为你应该完全避免这样做,因为比较可能会把事情搞砸。

PureComponentUpdate()中的ShouldComponentUpdate()将对当前和以前的道具和状态进行粗略的比较。 它跳过了整个渲染过程,包括在此组件和以下组件上调用render()。
这完全避免了和解过程。这意味着react不必更新V-DOM,也不需要与真实的DOM进行比较。这是一个昂贵的任务,与浅的比较。

只是提到<>代码> PuultCys有一个循环条件(浅)来检查道具是否改变了,认为这也是性能的代价,有时甚至比没有它要好。所以,这实际上取决于您的具体情况。取决于
元素是什么。您需要使用基准来估计
shouldComponentUpdate
是否合理。这总是这样做的。