狀態管理

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 的程式碼。多人一起開發大型應用程式