React

0. React 的第一性原理(Why React Exists)

0.1 React 要解决的本质问题

如何在状态不断变化的情况下,稳定、可预测、高性能地描述 UI?

React 的核心假设:

UI = f(state)

👉 React 的本质不是 DOM 库,而是一个 UI 描述 + 调度系统


0.2 React 的三层稳定架构

┌────────────────────────────┐│ 表达层(What)             │ JSX / React Element├────────────────────────────┤│ 计算层(How to describe)  │ Component / Hooks├────────────────────────────┤│ 调度层(When & How apply) │ Fiber / Reconciliation / Commit└────────────────────────────┘

这是理解 React 的总心智模型,后续所有概念都可以落在这三层中。


1. JSX:UI 描述语言(表达层)

1.1 JSX 的本质

JSX 不是模板,也不是 HTMLJSX 是 UI 的结构化描述语言

<header className="App-header">  <h1>main</h1></header>

其本质等价于:

React.createElement(type, props, children)

无论 React 17 前后的实现如何变化,不变的是:


1.2 Element / Component / DOM 的边界

概念本质
JSX语法糖
React ElementUI 的结构化描述
Component生成 Element 的函数
DOMElement 的物理投影

👉 React 从不“操作 DOM”,它只比较描述


1.3 JSX 的工程约束(为什么会踩坑)


2. 渲染与协调:描述如何变成现实(调度层)

2.1 两棵树模型

React 内部永远在处理两棵树:

旧 Element Tree新 Element Tree

React 不关心“你改了什么”,它只比较“你现在想要什么”


2.2 Reconciliation 的设计哲学

React Diff 的核心不是“最优”,而是:

在 O(n) 时间内,得到足够好的更新结果

三条稳定原则

  1. 类型决定命运

    • 不同类型 → 整棵子树重建
  2. Key 决定身份

    • Key 是元素的“社会身份”,不是索引
  3. 顺序假设

    • 默认假设列表是顺序稳定的

👉 这是工程取舍,不是算法缺陷。


3. Fiber:为什么 React 可以中断渲染

3.1 Fiber 的本质

Fiber = 可中断的工作单元(Work Unit)


3.2 Render Phase vs Commit Phase

阶段特性约束
Render Phase可中断 / 可重做必须纯函数
Commit Phase同步 / 不可中断允许副作用

👉 这就是为什么:


4. 组件模型:描述 UI 的计算单元(计算层)

4.1 组件的本质

Component = (props, state, context) → Element


4.2 数据流的第一性原则

单向数据流不是限制,而是治理手段

State → Props → Child           ↑        Callback

5. 生命周期:从“过程 API”到“阶段模型”

5.1 类组件生命周期的真实价值

生命周期不是为了“用”,而是为了划分阶段

阶段本质
Render描述 UI
Pre-Commit读取旧 DOM
Commit应用变更
Cleanup释放资源

👉 Hooks 本质上是对生命周期的函数化重构


6. Hooks:函数组件的状态与副作用系统

6.1 Hooks 的第一性原理

Hooks = 在函数执行过程中,为 Fiber 绑定状态单元

关键约束来源:

👉 所有 Hooks 规则都来自这一事实


6.2 状态 Hooks 的分工模型

Hook解决的问题
useState局部状态
useReducer复杂状态机
useRef脱离渲染的可变容器

6.3 副作用 Hooks 的时间语义

Hook执行时机用途
useLayoutEffectDOM 更新后同步布局测量
useEffect提交后异步IO / 订阅

👉 Effect 的存在,是为了保护 Render Phase 的纯度


6.4 useMemo / useCallback 的本质

React 性能问题 ≠ 计算慢而是“引用不稳定”

它们不是优化工具,而是稳定性工具


7. 组件复用与扩展机制

7.1 React.memo:渲染的幂等性保证

memo = 声明式的 shouldComponentUpdate

前提:


7.2 高阶组件(HOC)

本质模式:装饰器


8. 事件系统:一致性优先于原生行为

React 合成事件的目标不是“更快”,而是 跨浏览器一致性 + 可控传播模型


9. 应用状态管理:何时需要 Redux?

9.1 状态的分层治理模型

状态层级工具
组件私有useState
组件协作Props
跨层共享Context
全局业务Redux

👉 Redux 的核心价值不是“存状态”,而是:


10. React 的长期演进方向(稳定认知)

不变的部分

演进的部分


11. 总结:React 的工程哲学

React 是一套:

关联内容(自动生成)