React的更新

22 阅读1分钟

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