您的当前位置:首页正文

5. react 父子组件的渲染关系

来源:华拓网

父子组件的渲染关系

示例代码

虽然

点击change按钮后,Panel ClickCount Test都执行render,

  • 即使 修改了与Panel渲染无关的数据
  • 即使 传入ClickCount的props没有变化
  • 即使 没有传入Test props

但是
所有的组件和元素都render完成 ===> 执行diff算法 ===> 修改有差异的dom

所以
虽然执行了很多无用的render,但都是在js里执行的,和真正的dom操作之间还有一层diff算法,他帮助我们节省了大部分dom操作的性能。

render优化

虽然上述的好多无用的render执行,不是特别耗费性能,但能避免当然最好,所以react 生命周期中shouldComponentUpdate排上了用场。

  • 可以判断当前的state和props以及更新后的state和props是否有变化,来决定是否render这次更新,来避免无用的render。当然上述操作,只要我们 class Panel extends PureComponent {} PureComponent就已经帮我们做好了。
  • 在定义当前组件为PureComponent时,我们需要考虑当前的组件更新是否频繁:因为如果注定当前组件每次更新肯定会有所变化,那PureComponent是否更新的判断反而成为无用的。