5月29日 22:40

Zustand 有哪些常用中间件?怎么用?

Zustand 中间件就是高阶函数,用函数组合串联:create(devtools(persist(immer((set) => ...)))) 从内到外依次包裹。常用 5 个:persist 持久化到 storage;immer 支持 mutable 写法更新嵌套对象;devtools 接入 Redux DevTools;subscribeWithSelector 精确订阅子属性变化;combine 合并多个 slice。

追问

中间件的执行顺序有讲究吗?

有。从内到外:最内层的先执行。devtools(persist(immer(...))) 意味着 immer 先处理,再 persist,最后 devtools 记录。顺序反了会出错。

immer 和普通 set 的性能差异?

immer 用 Proxy 追踪变更,有额外开销但通常可忽略。大多数项目 immer 的开发体验收益远大于性能损失。

自定义中间件怎么做日志?

拦截 set 参数,前后打印状态即可。生产环境用 devtools 替代手动日志。

persist 的 partialize 怎么用?

partialize: (state) => ({ token: state.token, theme: state.theme }) 只持久化指定字段,避免把临时 UI 状态也存进 storage。

subscribeWithSelector 解决什么问题?

默认 useStore(s => s.items) 用 Object.is 比较,对象每次都是新引用所以总是重渲染。subscribeWithSelector 让你可以用 shallow 比较或自定义 equalityFn。

标签:Zustand