Redux 核心架构概述
Redux 是可预测的全局状态容器:状态只从 单一 store 读出,只通过 dispatch(action) 改变,改变方式由 纯 reducer 描述。现代应用多通过 Redux Toolkit (RTK) 使用,但核心仍是下面三条。
1. 三大原则
| 原则 | 含义 | 工程收益 |
|---|---|---|
| 单一数据源 | 一棵 state 树在一个 store | 调试、SSR 序列化、时间旅行 |
| 状态只读 | 只能 dispatch plain action | 变更可记录、可回放 |
| 纯函数 reducer | (state, action) => nextState | 可测、可组合、无副作用 |
违反示例:直接 getState().list.push(x)、在 reducer 里 fetch、action 用函数(除非 thunk 中间件吃掉)。
2. 核心组件
mermaid
flowchart LR
UI -->|dispatch action| M[middleware 链]
M --> R[reducer]
R --> S[(store state)]
S -->|subscribe / useSelector| UI| 组件 | 职责 |
|---|---|
| Store | getState / dispatch / subscribe |
| Action | { type, ...payload } 事件描述 |
| Reducer | 计算下一状态;常 combineReducers 分 slice |
| Middleware | 扩展 dispatch(异步、日志) |
专题:02 Store、03 Reducer、04 Middleware。
3. 数据流(一句话)
UI 发 action → middleware → reducer 合并 state → 订阅方读新 state → UI 更新(react-redux 负责组件侧)。
4. 与其它方案
| Redux + RTK | Zustand | Context | |
|---|---|---|---|
| 样板 | 中(RTK 已减) | 极少 | 少 |
| 约束 | 强 | 弱 | 无 |
| 适用 | 大团队、要 DevTools/中间件 | React 局部/全局轻量态 | 主题、locale |
5. Redux 5 / RTK
- 核心包 TypeScript 类型加强(见 07)。
- 新项目优先
configureStore+createSlice,不必手写switch。
6. 适用场景
适合:多源同步、要严格追溯变更、复杂异步链、已有 Redux 生态。
可考虑更轻:简单全局态、要快上手 → Zustand。
7. 总结
Redux 用纪律换可推理;读源码从 createStore 与 combineReducers 即可串起全库。后续章节按数据流展开,不重复贴实现代码。