为什么React的PureComponent建议让所有的孩子都拥有纯净的#34;

时间:2017-12-05 05:15:35

标签: reactjs

阅读官方React documentation后,我发现this关于 PureComponent

  

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

为什么跳过整个子树的道具更新确实意味着避免使用非纯组件? PureComponent组件子树中非纯组件的后果是什么(一般情况下以及未设计/应该对道具进行响应的情况下)。

2 个答案:

答案 0 :(得分:3)

同一组输入道具的Pure Component将给出绝对相同的结果,不仅仅是为了它自己,而是为整个DOM树。当您声明PureComponent时,您不仅需要考虑道具和state,还需要考虑contextPureComponents阻止任何上下文更改。考虑一个例子

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

React-router的路由器将当前位置存储在上下文的路由器道具中。并且React-router的Switch会读回它并选择一个Route.But,因为App是一个非常纯粹的组件,不会对路由器中的context更改作出反应,因为它值{并且应该忽略它们的not using。因此,当你有一个PureComponent时,你不仅要考虑组件,还要考虑它的嵌套子组件。所以基本上你也会让你所有的孩子保持纯洁。

答案 1 :(得分:0)

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