<-Home
React render 需要满足的条件
React 创建Fiber树时,每个组件对应的 fiber 都是通过以下两个逻辑之一创建的:
- render,主动调用render函数,根据函数返回的jsx 创建的 fiber;
- bailout,即满足一定条件时,React判断该组件更新前后没有发生变化,则复用上一次更新的fiber作为本次更新的fiber;
bailout 需要满足的条件: 那么什么时候回进入bailout逻辑呢?当同时满足以下四个条件时:
- oldProps === newProps(注意这里是全等,是对引用进行判断,如果我们使用PureComponent或者Memo,则是对props进行浅比较)
- context.value 没有生变化
- workdInProgress.type === current.type(更新前后fiber.type 是否发生变化,如从div 变成 p)
- !includesSomeLane(renderLanes, updateLanes) ? 当前fiber上是否存在更新,如果存在那么更新的优先级是否和本次整棵fiber树调度的优先级一致?如果一致则进入render逻辑。