React的更新分为Render和Commit两个阶段。
React Fiber节点的更新在React的Render阶段,
分为beginWork, completeWork两个阶段。
首先,React从上往下遍历fiber树,对于每一个fiber节点触发beginWork方法,打上不同 effectTag。
然后在CompleteWork进行收集,会将 effectTag 的 Fiber 节点会被保存在一条被称为 effectList 的单向链表中。在 commit 阶段,将不再需要遍历每一个 fiber ,只需要执行更新 effectList 。
commit 阶段
一方面是 对一些生命周期和副作用钩子的处理,比如 componentDidMount ,函数组件的 useEffect ,useLayoutEffect ;
另一方面就是更新DOM,添加节点( Placement ),更新节点( Update ),删除节点( Deletion )
Before mutation 会 异步调用 useEffect , useEffect 是采用异步调用的模式,其目的就是 防止同步执行时阻塞浏览器做视图渲染。 Mutation 进行真实的 DOM 操作。 Layout