useReducer 局限性,
不支持异步函数
不支持内部的 reducer 互相调用
不支持和其他 state 联动(比如要当参数穿进去才可用
性能优化、受控、action 互调、数据切片、状态调试

zustand 中,函数不用区分同步或者异步
zustand 的 useStore 出来的值或者方法,都是橙色的变量,具有稳定引用,不会造成不必要的重复渲染。

  • get 方法直接拿到当前 store 中最新的 state 快照,获取最新值
  • 数据分形在状态管理,子组件能够以同样的结构,作为一个应用使用,这样的结构就是分形

persist本地存储

实现本地持久化存储,刷新页面会自动将本地数据装载到 store中

  1. import { devtools } from 'zustand/middleware';
  2. export const useBearStore = create(
  3. persist(
  4. (set, get) => ({
  5. bears: 0,
  6. addABear: () => set({ bears: get().bears + 1 }),
  7. }),
  8. {
  9. // name of the item in the storage (must be unique)
  10. name: 'food-storage',
  11. // (optional) by default, 'localStorage' is used
  12. storage: createJSONStorage(() => sessionStorage),
  13. }
  14. )
  15. );

zustand undoredo

状态派生