阅读了React官方文档后,我发现了关于PureComponent的以下内容:
此外,反应。PureComponent的shouldComponentUpdate()跳过整个组件子树的道具更新。确保所有子组件也是“纯”的。
为什么跳过整个子树的道具更新意味着避免非纯组件?PureComponent组件子树中的非纯组件的后果是什么(一般情况下以及当它不被设计/不应该响应道具更改时)。
对于同一组输入道具的纯组件将给出完全相同的结果,不仅对于它自己,而且对于整个DOM树。当您声明一个PureComponent
时,您不仅需要考虑道具和状态
,还需要考虑上下文
。PureComponents
阻止任何上下文更改。考虑一个例子
<MyApp>
<Router> // react-router.
<App> // A PureComponent
<Switch> // react-router Switch
<Route ....>
</Switch>
</App>
</Router>
</MyApp>
React路由器的路由器将在上下文的路由器道具中存储当前位置。路由器的交换机会将其读回并选择一条路由。但由于App
是一个非常纯粹的组件,它不会对路由器中的上下文变化做出反应,因为它
不使用该值,应该忽略它们。因此,当您有一个PureComponent时,您不仅应该考虑该组件,还应该考虑其嵌套的子组件。所以基本上你也会让你所有的孩子保持纯洁。
每个道具都应该是不可变的。它需要更容易调试。例如。通过道具放置用户数组。但是,组件之一:user.name=值。子组件可能很多,你会很难理解,什么是用户组件更新?