状态管理

Context / Zustand / Redux Toolkit

推荐

Zustand

写起来简短,也不用费事用 Provider 包起来。如果是不常变化的值,不用引入库,用 Context 就够了

比较效果

用每个库做了同样的东西,动手试试看。

Context
Zustand
Redux Toolkit

比较代码

修改代码,右边的预览会跟着变化。

import { createContext, useContext, useState } from "react"
import { CartHeader, ProductRow, Shell } from "./ui"

const CartContext = createContext({ count: 0, add: () => {} })

function Header() {
  const { count } = useContext(CartContext)
  return <CartHeader count={count} />
}

function Product({ name }: { name: string }) {
  const { add } = useContext(CartContext)
  return <ProductRow name={name} onAdd={add} />
}

export default function App() {
  const [count, setCount] = useState(0)
  const add = () => setCount(count + 1)

  return (
    <CartContext.Provider value={{ count, add }}>
      <Shell>
        <Header />
        <Product name="产品 A" />
        <Product name="产品 B" />
      </Shell>
    </CartContext.Provider>
  )
}

比较

截至 2026 年 10 月

特点

React 自带。用 Provider 包住组件来分发值,再用 useContext 读取。值一变化,所有读取它的地方都会重新渲染

适用场景

共享不常变化的值,比如当前登录的用户或深色模式设置

Zustand

推荐官方网站 ↗

特点

目前很流行的库。用 create 把值和修改它的函数集中在一处,在任何地方都能使用。不需要 Provider,代码也很简短

适用场景

推荐。共享经常变化的值,比如购物车里的商品

Redux Toolkit

官方网站 ↗

特点

让历史悠久的 Redux 能写得更简短的工具。规则较多,所以即使多人协作,写法也能保持统一

适用场景

维护公司里已经在用 Redux 的代码。多人协作开发大型应用