You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.0 KiB
1.0 KiB
before Mutation 阶段主要处理三件事情:
- 处理用户离散事件
- 执行 commitBeforMutationEffectOnFiber 函数
- 判断 Fiber 是否存在 Passive 的标记,有的话就执行 flushPassiveEffects 回调函数
commitBeforMutationEffectOnFiber(commitBeforeMutationLifeCycles)
内部会根据 Fiber 的 tag 进入不同的处理逻辑,以 ClassComponents 为例,如果 Fiber 节点上有 Snapshot 的标记,那么会通过 Fiber stateNode 属性取到 ClassComponent 实例执行 getSnapshotBeforeUpdate 这个生命周期函数
如果一个 Fiber 存在 Passive 标记,以 FunctonComponent 为例,那么它会将 flushPassiveEffects 作为回调函数传递给 scheduleCallback 函数以普通优先级进行调度,flushPassiveEffects 中就是 FunctonComponent 的 useEffect
从这里可以看到,整个 commit 阶段是同步执行的,但是 useEffect 的回调函数会传递给 scheduleCallback 函数异步执行,所以 useEffect 回调是在 commit 阶段结束之后以异步优先级进行执行