Reactjs 为什么要做出反应';s PureComponent建议将其所有子项;纯粹的;

Reactjs 为什么要做出反应';s PureComponent建议将其所有子项;纯粹的;,reactjs,Reactjs,在阅读了官方文件后,我发现了关于PureComponent: 此外,React.PureComponent的shouldComponentUpdate()跳过prop 更新整个组件子树。确保所有的孩子 组件也是“纯”的 为什么跳过整个子树的道具更新意味着避免非纯组件?PureComponent的组件子树中的非纯组件会有什么后果(一般情况下,以及在其未设计/不应响应道具更改的情况下)。每个道具都应该是不可变的。它需要更容易调试。 例如您可以通过道具放置一组用户。但是,其中一个组件是:user.na

在阅读了官方文件后,我发现了关于PureComponent

此外,React.PureComponent的shouldComponentUpdate()跳过prop 更新整个组件子树。确保所有的孩子 组件也是“纯”的


为什么跳过整个子树的道具更新意味着避免非纯组件?PureComponent的组件子树中的非纯组件会有什么后果(一般情况下,以及在其未设计/不应响应道具更改的情况下)。

每个道具都应该是不可变的。它需要更容易调试。 例如您可以通过道具放置一组用户。但是,其中一个组件是:user.name=value。
子组件可能很多,您将很难理解,什么是组件更新用户?

对于同一组输入道具,一个纯组件将给出完全相同的结果,不仅对其本身,而且对整个DOM树。声明
PureComponent
时,不仅需要考虑道具和
状态
,还需要考虑
上下文
<代码>纯组件阻止任何上下文更改。考虑一个例子

<MyApp>      
 <Router>    // react-router.
  <App>   // A PureComponent
   <Switch>  // react-router Switch
     <Route ....>
   </Switch>
  </App>
 </Router>
</MyApp>

//反应路由器。
//纯组分
//反应路由器交换机

React路由器的路由器将在上下文的路由器道具中存储当前位置。而React路由器的交换机会将其读回并选择一条路由。但由于
App
是一个非常纯的组件,不会对路由器中的
上下文变化做出反应,因为它
不使用该值,应该忽略它们。因此,当您有一个PureComponent时,您不仅应该考虑该组件,还应该考虑其嵌套的子组件。所以基本上你也会让你所有的孩子保持纯洁。

谢谢你的回答。如果子树中的组件(根据设计)不应该作用于道具更改,那么情况会怎样?或者这就是你在第一句话中想说的吗?所以一般来说,如果子组件不依赖于上下文,那么它们是否为PureComponent可能无关紧要,因为它们的父组件本身不会重新呈现。只有当父组件是PureComponent时,子组件也必须是example@ShubhamKhatri你确定吗?我的90%组件是纯组件,当有子组件需要渲染时,只需渲染,因为父组件不拥有子组件渲染周期。@LeandroSoares,子组件可以因为状态更改而重新渲染,这很好,因为在这种情况下,组件的浅比较将返回false,如果其子组件的道具没有更改,子组件将不会重新渲染,因此即使使用PureComponent,也不会重新渲染。@shubhamkhattri我说的是“PureComponents阻止任何上下文更改”。