阅读官方React documentation后,我发现this关于 PureComponent :
此外,React.PureComponent的shouldComponentUpdate()跳过prop 整个组件子树的更新。确保所有的孩子 组件也是“纯粹的”。
为什么跳过整个子树的道具更新确实意味着避免使用非纯组件? PureComponent组件子树中非纯组件的后果是什么(一般情况下以及未设计/应该对道具进行响应的情况下)。
答案 0 :(得分:3)
同一组输入道具的Pure Component将给出绝对相同的结果,不仅仅是为了它自己,而是为整个DOM树。当您声明PureComponent
时,您不仅需要考虑道具和state
,还需要考虑context
。 PureComponents
阻止任何上下文更改。考虑一个例子
<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。 儿童组件可能很多,您很难理解组件是什么更新了用户?