Zustand 状态管理 #
Zustand 是一个轻量级、简洁且强大的 React 状态管理库。它的名字来自德语,意为"状态"。相比于 Redux 的繁琐和 Context API 的性能问题,Zustand 提供了更优雅的解决方案。
为什么选择 Zustand? #
与其他状态管理方案对比 #
| 特性 | Zustand | Redux | Context API | MobX |
|---|---|---|---|---|
| 包体积 | ~1KB | ~7KB | 0KB | ~16KB |
| 学习曲线 | 低 | 高 | 低 | 中 |
| 样板代码 | 极少 | 多 | 少 | 中 |
| 性能 | 优秀 | 优秀 | 一般 | 优秀 |
| TypeScript | 原生支持 | 需配置 | 原生支持 | 需配置 |
| 调试工具 | 有 | 有 | 无 | 有 |
核心优势 #
text
Zustand 核心优势
├── 极简 API ──────── 一个函数创建 store
├── 零样板代码 ────── 无需 actions、reducers、dispatchers
├── 优秀性能 ──────── 组件级别精确更新
├── TypeScript ────── 开箱即用的类型支持
├── 中间件系统 ────── persist、devtools、immer 等
├── 无需 Provider ─── 直接使用,无需包裹组件
└── React 无关 ────── 可在 React 外部使用
学习路线 #
第一阶段:基础入门 #
适合零基础开发者,学习 Zustand 的核心概念和基本用法。
- Zustand 简介 - 了解 Zustand 的特点和优势
- 安装与配置 - 快速集成到项目中
- 创建 Store - 掌握 store 创建方法
- 使用 Store - 在组件中读取和更新状态
第二阶段:进阶使用 #
掌握 Zustand 的核心功能和常用模式。
- Actions 与状态更新 - 定义和调用 actions
- 异步操作 - 处理异步数据获取
- 中间件系统 - 使用内置中间件
- 状态持久化 - 数据本地存储
第三阶段:高级特性 #
深入理解 Zustand 的高级功能。
- TypeScript 集成 - 完整类型支持
- 开发调试 - 使用 DevTools 调试
- 测试策略 - 单元测试与集成测试
- 性能优化 - 优化渲染性能
第四阶段:最佳实践 #
学习企业级开发模式和技巧。
- Store 切片模式 - 模块化状态管理
- 计算属性 - 派生状态处理
- 最佳实践 - 开发规范与技巧
快速预览 #
一个简单的计数器 #
tsx
import { create } from 'zustand'
interface CounterStore {
count: number
increment: () => void
decrement: () => void
}
const useCounterStore = create<CounterStore>((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}))
function Counter() {
const { count, increment, decrement } = useCounterStore()
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
<button onClick={decrement}>-</button>
</div>
)
}
对比 Redux #
tsx
// Redux 需要大量样板代码
// 1. 定义 action types
const INCREMENT = 'INCREMENT'
const DECREMENT = 'DECREMENT'
// 2. 定义 action creators
const increment = () => ({ type: INCREMENT })
const decrement = () => ({ type: DECREMENT })
// 3. 定义 reducer
const reducer = (state = { count: 0 }, action) => {
switch (action.type) {
case INCREMENT:
return { count: state.count + 1 }
case DECREMENT:
return { count: state.count - 1 }
default:
return state
}
}
// 4. 创建 store
const store = createStore(reducer)
// 5. Provider 包裹
<Provider store={store}>
<App />
</Provider>
// Zustand 只需几行代码
const useStore = create((set) => ({
count: 0,
increment: () => set((s) => ({ count: s.count + 1 })),
decrement: () => set((s) => ({ count: s.count - 1 })),
}))
前置知识 #
学习本指南前,建议具备以下基础:
- React 基础(组件、Props、State)
- React Hooks(useState、useEffect)
- JavaScript ES6+ 语法
- 基本的 TypeScript 知识(可选)
版本说明 #
本指南基于 Zustand 4.x 编写,推荐使用最新稳定版本。
| 版本 | 状态 | 说明 |
|---|---|---|
| Zustand 4.x | 推荐 | 最新版本,支持 React 18 |
| Zustand 3.x | 维护 | 稳定版本 |
学习建议 #
- 循序渐进:按照章节顺序学习,打好基础
- 动手实践:每学完一章,动手编写代码
- 对比学习:与其他状态管理方案对比理解
- 项目驱动:通过实际项目巩固知识
技术栈概览 #
text
Zustand 技术栈
├── Zustand 4.x 状态管理核心
├── React 18.x UI 框架
├── TypeScript 5.x 类型支持(推荐)
├── Zustand DevTools 调试工具
└── immer 不可变数据处理(可选)
开始你的 Zustand 学习之旅吧!
最后更新:2026-03-28