如果你说的是 React Native 新架构里的 Fabric Renderer,它的核心渲染链路可以概括成:
sql
React Component
↓
React Reconciler
↓
Shadow Tree
↓
Commit
↓
Mount
↓
Fabric Renderer
↓
Native View / UIKit / Android View
↓
屏幕显示
更完整一点:
sql
JS Thread
┌─────────────────────────────────────┐
│ React Component │
│ ↓ │
│ React Reconciler │
│ ↓ │
│ C++ Shadow Tree │
└──────────────┬──────────────────────┘
│ Commit
↓
┌─────────────────────────────────────┐
│ Fabric C++ │
│ │
│ Shadow Tree │
│ ↓ │
│ Tree Diff │
│ ↓ │
│ Mutation Instruction │
│ ↓ │
│ Mounting Layer │
└──────────────┬──────────────────────┘
│
create / update / delete
↓
┌─────────────────────────────────────┐
│ Native Platform │
│ │
│ iOS: UIView / CALayer │
│ Android: View / ViewGroup │
└─────────────────────────────────────┘
1. React 层
例如:
xml
<View style={{ width: 100, height: 100 }}>
<Text>Hello</Text>
</View>
React 首先进行 reconciliation:
markdown
React Element
↓
Fiber Tree
↓
Reconciliation
这里主要回答:
React 状态变化以后,哪些组件发生了变化?
2. Shadow Tree
Fabric 的核心之一是 Shadow Tree。
可以理解成 JS/React 世界和真正 Native View 之间的一层:
sql
React
│
▼
Shadow Tree
│
▼
Native View
例如:
markdown
ShadowTree
└── View
├── Text
└── Image
Shadow Node 会保存:
bash
props
state
layout
event handlers
children
component type
注意:
Shadow Node ≠ 真正的 UIView / Android View。
它更像是 Native UI 的"声明式描述"。
3. Layout
Fabric 使用 Yoga 计算布局:
arduino
Shadow Tree
↓
Yoga
↓
x
y
width
height
例如:
makefile
View
width: 100
height: 100
margin: 10
最终得到:
ini
LayoutMetrics
x = 10
y = 20
width = 100
height = 100
所以可以简单理解:
Props
↓
Shadow Node
↓
Yoga Layout
↓
LayoutMetrics
4. Commit
这是 Fabric 很重要的一步。
React 产生新的 Shadow Tree 后,并不是马上修改 Native View。
而是:
markdown
Old Shadow Tree
+
New Shadow Tree
↓
Diff
↓
Mutations
例如:
旧:
scss
View
├── Text("Hello")
└── Image
新:
scss
View
├── Text("World")
└── Image
Fabric 可以发现:
scss
Text
props/text changed
然后生成类似:
scss
Update Text
这样的 mutation。
5. Mount
Commit 得到 mutations 后进入 Mount 阶段。
例如:
sql
Create
Insert
Update
Delete
可以理解成:
markdown
Shadow Tree Diff
↓
Mutation List
↓
Mounting
↓
Native View
比如:
sql
Create View
Create Text
Insert Text into View
Update Text
最终才真正操作:
objectivec
UIView
Android View
一张图理解 Fabric
sql
React
│
▼
React Fiber
│
▼
┌─────────────────┐
│ Shadow Tree │
│ │
│ ShadowNode │
│ ShadowNode │
│ ShadowNode │
└────────┬────────┘
│
▼
Yoga
│
▼
Layout Metrics
│
▼
Commit
│
▼
Tree Diff
│
▼
Mutations
/ | \
Create Update Delete
\ | /
▼
Mount
│
┌────────┴────────┐
▼ ▼
iOS Android
UIView View
│ │
└────────┬────────┘
▼
GPU
│
▼
Screen
Fabric 最关键的三个概念
如果你是在准备 React Native 源码/面试,建议重点理解这三个:
| 概念 | 解决什么问题 |
|---|---|
| Shadow Tree | 描述 UI |
| Commit | 计算 UI 应该怎么变化 |
| Mount | 把变化真正应用到 Native View |
一句话:
Fabric 不是"React 直接操作 Native View",而是 React 产生新的 Shadow Tree → Commit 做 Tree Diff → 生成 Mutations → Mount 阶段把 Mutations 应用到 Native View。
另外,Fabric 和旧架构最大的区别之一,就是它把 UI 描述、计算和 Native View 操作 更明确地拆开,并且核心渲染管线大量下沉到 C++。
如果你是在看 React Native Fabric 源码,下一步最值得顺着这条链看:
css
ReactFiber
↓
ShadowNode
↓
ShadowTree::commit()
↓
calculateMutationInstructions()
↓
MountingCoordinator
↓
MountingManager
↓
UIView / Android View
这条链基本就是 Fabric 源码主线。