[React] React Fiber - 2 - 深入 React 原始碼
備註
此篇原始碼解說文主要以剛出現 Fiber 架構的 React v16.0 為主,因為相對完整和簡單,後續的版本差異請自行參考官方原始碼
Fiber tree
就像 HTML DOM 是 tree data structure,React 的 Virtual DOM 也是 tree data structure,React
但在內部,React 會有兩個 Virtual DOM tree(或稱 Fiber tree),一個是 current tree,另一個是 work in progress tree
- Current tree:目前正在瀏覽器渲染的 Fiber tree
- Work in progress tree:正在計算更新的 Fiber tree
而且 React 內 部會有一個 pointer,指向現在要渲染出來的 Fiber tree 是哪一個,當 Work In Progress Tree 計算完成後,會取代 Current Tree,成為新的 Current Tree,示意動畫如下:
Work Loop
因為狀態更新而開始計算 Work In Progress Tree 的過程中,React 會類似 Recursion 的方式,處理 Fiber nodes
- 當從 root fiber node 開始計算時,會呼叫
beginWork(v16 Line 710) 函式,生成或更新現在的 fiber node - 當計算到 leaf fiber node 時,會呼叫
completeWork(v16 Line 618) 函式回到 parent fiber node