What is?
react的渲染分为两个阶段:
- render,组件第一次出现在屏幕上的时候触发
- re-render, 组件第一次渲染之后的渲染
当app的数据更新时(用户手动更新、或异步请求)。
When?
re-render发生有四种可能:
- state改变: 所有re-render的根源
- 父组件渲染
- 上下文改变: 全局变量的改变会引起所有使用此变量的组件
Reconciliation
Reconciliation被称为diff算法,用来比较两个React元素树的差异,提高渲染的效率,尽可能复用现有的组件和DOM。
通过比较元素的type和key相同就复用,否则就销毁和新建。
Props
改变props需要父组件更新,子组件无法改变props
optimise
- 在组件中创建组件,将会极大的拖慢渲染速度。可能会引起闪烁、非期望的状态重置、useeffect不触发依赖、失去焦点等问题。
- 把state尽可能的移动到子组件中
- 将A组件作为props传给B组件,B组件的渲染不会带来A的渲染
- 使用React.memo,防止渲染