Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React.Component与React.PureComponent_Reactjs_State - Fatal编程技术网

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值(如对象和数组)之间的引用是否相同


来源:

在我看来,主要区别在于组件每次重新启动其父级时都会重新启动,而不管组件的道具和状态是否已更改

另一方面,除非纯组件的道具(或状态)已更改,否则纯组件在其父级重新渲染时不会重新渲染

例如,假设我们有一个具有三级层次结构的组件树:父级、子级和子级

当家长的道具以仅改变一个孩子的道具的方式改变时,则:

  • 如果所有组件都是常规组件,则整个组件树将重新渲染
  • 如果所有子代和子代都是纯组件,则只有一个子代将重新播放,并且其一个或所有子代将重新播放,具体取决于其道具是否已更改。 如果此组件树中有许多组件,则可能意味着显著的性能提升
但是,有时使用纯组件不会产生任何影响。我遇到过这样的情况,家长从redux商店收到道具,需要对孩子的道具进行复杂的计算。父级使用平面列表渲染其子级

结果是,每次redux存储中有一个小的变化,孩子们的数据的整个平面列表数组都会被重新计算。这意味着对于树中的每个组件,道具都是新对象,即使值没有改变


在这种情况下,纯组件没有帮助,只有使用常规组件并在shouldComponentUpdate中检查子组件(如果需要重新加载),才能实现性能提升

我知道你发布这篇文章已经有几个月了,但我认为这篇文章可能会有所帮助:Hi@VimalrajSankar。谢谢你的帮助。请给出以下语句的示例:
这意味着在比较标量值时,它会比较它们的值,但在比较对象时,它只比较引用。它有助于提高应用程序的性能。
?Thanks@Mr.Script我希望这将有助于
State/Props不应该有层次结构
对不起,你能解释一下这里的层次结构是什么意思吗?@SanyLiew它的意思是State和Props应该只包含数字和字符串等基本值,而不包含对象(层次结构)中的对象。如果State/Props是不可变对象,那么,拥有层次结构并仍然使用PureComponent应该是可以的,只要这些层次结构也保持不变的对象,对吗?React.Component=>所以如果我用相同的道具多次重新渲染相同的组件。我