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 的高级功能。

第四阶段:最佳实践 #

学习企业级开发模式和技巧。

快速预览 #

一个简单的计数器 #

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 维护 稳定版本

学习建议 #

  1. 循序渐进:按照章节顺序学习,打好基础
  2. 动手实践:每学完一章,动手编写代码
  3. 对比学习:与其他状态管理方案对比理解
  4. 项目驱动:通过实际项目巩固知识

技术栈概览 #

text
Zustand 技术栈
├── Zustand 4.x        状态管理核心
├── React 18.x         UI 框架
├── TypeScript 5.x     类型支持(推荐)
├── Zustand DevTools   调试工具
└── immer              不可变数据处理(可选)

开始你的 Zustand 学习之旅吧!

最后更新:2026-03-28