本页面解释了 Zustand 的基本概念和架构,包括 stores、state、actions 和 subscription 系统。有关特定 store 创建方法的详细信息,请参阅Store Creation,有关详细的状态更新模式,请参阅State Updates。
Zustand 构建于四个核心抽象之上,构成了其极简而强大的设计。
Zustand store 由 StoreApi 接口定义的简单 API 组成。
Zustand 的架构有意设计得极为精简,核心状态管理与框架绑定之间有清晰的分离。
来源:src/vanilla.ts99-100 src/react.ts63-64 src/traditional.ts84-90
Zustand 的核心状态管理流程遵循此模式:
Zustand 提供了两种主要创建 store 的方式:
createStore 实现与框架无关的功能。create 实现 React 特定的功能。createStore 函数创建一个独立于任何 UI 框架的基础 store。
Store 创建函数接收:
set:更新 state 的函数。get:读取当前 state 的函数。api:对 store API 的引用。create 函数建立在 createStore 之上,提供了 React 集成。
在 React 组件中使用时,返回的 hook 会自动处理订阅和重新渲染。
Zustand 中的状态更新可以通过三种方式进行:
| 更新类型 | 示例 | 描述 |
|---|---|---|
| 部分 | set({ count: 5 }) | 与现有 state 合并。 |
| 函数式 | set(state => ({ count: state.count + 1 })) | 从当前 state 计算新 state。 |
| 替换 | set({ count: 0 }, true) | 替换整个 state。 |
setState 的内部实现决定了更新类型并据此进行应用。
React 集成通过 useStore hook 实现,该 hook 将组件连接到 stores。
以下是 state 变更如何从 store 流向 components:
来源:tests/basic.test.tsx49-68 tests/basic.test.tsx130-163
Zustand 使用 TypeScript 构建,并提供类型安全的 API。主要类型包括:
| 类型 | 描述 |
|---|---|
StoreApi<T> | Zustand store 的接口,state 类型为 T。 |
StateCreator<T, ...> | store 初始化函数的类型。 |
UseBoundStore<S> | React 绑定的 store hook 的类型。 |
ExtractState<S> | 用于从 store 提取 state 类型的工具类型。 |
来源:src/vanilla.ts9-41 src/react.ts39-42
以下是 store 从创建到在组件中使用的完整生命周期:
来源:tests/basic.test.tsx21-41 tests/basic.test.tsx49-90
Zustand 状态管理的核心位于 vanilla.ts 文件中的 createStoreImpl 函数。该函数:
Set。setState 来更新 state 和通知监听器。getState 来读取当前 state。subscribe 来注册和注销监听器。react.ts 中的 React 绑定:
createStore 创建 store。useStore。这种方法在 vanilla store 实现与 React 组件模型之间创建了无缝的集成。
来源:src/vanilla.ts60-97 src/react.ts53-61
Zustand 的架构通过以下方式平衡了简洁性和强大功能:
这种设计使得 Zustand 能够提供强大的状态管理功能,同时 API 表面积却异常地小。