Reactjs React.Component与React.PureComponent
官方声明“Reactjs React.Component与React.PureComponent,reactjs,state,Reactjs,State,官方声明“React.PureComponent的shouldComponentUpdate()只对对象进行了粗略的比较”,如果状态为“deep”,则建议不要这样做 有鉴于此,在创建React组件时,有没有理由更喜欢React.PureComponent 问题: 在使用 Real.组件< /代码>中是否会有性能上的影响?我们可以考虑去 > PURACE组件< /C> > 我猜PureComponent的shouldComponentUpdate()只执行肤浅的比较。如果是这样的话,难道不能用
React.PureComponent
的shouldComponentUpdate()
只对对象进行了粗略的比较”,如果状态为“deep”,则建议不要这样做
有鉴于此,在创建React组件时,有没有理由更喜欢React.PureComponent
问题:
- 在使用<代码> Real.组件< /代码>中是否会有性能上的影响?我们可以考虑去<代码> > PURACE组件< /C> >
- 我猜
的PureComponent
只执行肤浅的比较。如果是这样的话,难道不能用这种方法进行更深入的比较吗shouldComponentUpdate()
- “此外,
的React.PureComponent
跳过整个组件子树的道具更新”-这是否意味着道具更改被忽略shouldComponentUpdate()
如果有帮助的话,阅读本文会产生问题。反应。PureComponent和反应。Component之间的主要区别是对状态更改进行了
PureComponent
浅层比较。这意味着在比较标量值时,它会比较它们的值,但在比较对象时,它只比较引用。它有助于提高应用程序的性能
当您可以满足以下任何条件时,应选择React.PureComponent
- 状态/道具应该是不可变的对象
- 状态/道具不应具有层次结构
- 数据更改时,应调用
forceUpdate
React.PureComponent
,则应确保所有子组件也是纯组件
使用React.component是否会对性能产生影响
考虑反应,纯成分?
是的,它将提高你的应用程序性能(因为比较肤浅)
我猜Purecomponent的shouldComponentUpdate()只执行
肤浅的比较。如果是这种情况,上述方法不能使用吗
为了更深入的比较
你猜对了。如果你满足我上面提到的任何条件,你都可以使用它
此外,React.PureComponent的shouldComponentUpdate()跳过了prop
整个组件子树的更新”-这是否意味着
是否忽略更改
是的,如果在浅层比较中找不到差异,道具更改将被忽略。Component
和PureComponent
有一个差异
PureComponent
与Component
完全相同,只是它为您处理shouldComponentUpdate
方法
当道具或状态发生变化时,PureComponent
将对道具和状态进行浅层比较<代码>组件则不会将当前道具和状态与下一个现成道具和状态进行比较。因此,默认情况下,只要调用shouldComponentUpdate
,组件就会重新渲染
浅显比较
在比较前一个道具和状态与下一个道具和状态时,浅层比较将检查原语是否具有相同的值(例如,1等于1或true等于true),以及更复杂的javascript值(如对象和数组)之间的引用是否相同
来源:在我看来,主要区别在于组件每次重新启动其父级时都会重新启动,而不管组件的道具和状态是否已更改 另一方面,除非纯组件的道具(或状态)已更改,否则纯组件在其父级重新渲染时不会重新渲染 例如,假设我们有一个具有三级层次结构的组件树:父级、子级和子级 当家长的道具以仅改变一个孩子的道具的方式改变时,则:
- 如果所有组件都是常规组件,则整个组件树将重新渲染
- 如果所有子代和子代都是纯组件,则只有一个子代将重新播放,并且其一个或所有子代将重新播放,具体取决于其道具是否已更改。 如果此组件树中有许多组件,则可能意味着显著的性能提升李>
在这种情况下,纯组件没有帮助,只有使用常规组件并在shouldComponentUpdate中检查子组件(如果需要重新加载),才能实现性能提升 我知道你发布这篇文章已经有几个月了,但我认为这篇文章可能会有所帮助:Hi@VimalrajSankar。谢谢你的帮助。请给出以下语句的示例:
这意味着在比较标量值时,它会比较它们的值,但在比较对象时,它只比较引用。它有助于提高应用程序的性能。
?Thanks@Mr.Script我希望这将有助于State/Props不应该有层次结构
对不起,你能解释一下这里的层次结构是什么意思吗?@SanyLiew它的意思是State和Props应该只包含数字和字符串等基本值,而不包含对象(层次结构)中的对象。如果State/Props是不可变对象,那么,拥有层次结构并仍然使用PureComponent应该是可以的,只要这些层次结构也保持不变的对象,对吗?React.Component=>所以如果我用相同的道具多次重新渲染相同的组件。我