状态管理
Context / Zustand / Redux Toolkit
推荐Zustand
写起来简短,也不用费事用 Provider 包起来。如果是不常变化的值,不用引入库,用 Context 就够了
比较代码
修改代码,右边的预览会跟着变化。
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>
)
}特点
React 自带。用 Provider 包住组件来分发值,再用 useContext 读取。值一变化,所有读取它的地方都会重新渲染
适用场景
共享不常变化的值,比如当前登录的用户或深色模式设置
特点
目前很流行的库。用 create 把值和修改它的函数集中在一处,在任何地方都能使用。不需要 Provider,代码也很简短
适用场景
推荐。共享经常变化的值,比如购物车里的商品
特点
让历史悠久的 Redux 能写得更简短的工具。规则较多,所以即使多人协作,写法也能保持统一
适用场景
维护公司里已经在用 Redux 的代码。多人协作开发大型应用