Cách chia nhỏ Zustand store thành nhiều slices?

Slice pattern tổ chức Zustand store lớn thành modules độc lập — mỗi slice là StateCreator function, combine bằng spread trong create(); tên state không được trùng giữa các slices.

  • Slice pattern giúp tổ chức store lớn thành các modules độc lập.
  • Mỗi slice là một StateCreator function: const createCartSlice = (set, get) => ({ items: [], addItem: (item) => set(s => ({ items: [...s.items, item] })), clearCart: () => set({ items: [] }) }).
  • Tương tự: const createUserSlice = (set) => ({ user: null, setUser: (u) => set({ user: u }), logout: () => set({ user: null }) }).
  • Combine trong create: const useBoundStore = create((...a) => ({ ...createCartSlice(...a), ...createUserSlice(...a) })).
  • Với TypeScript: dùng StateCreator<BoundStore, [], [], CartSlice> để type đúng — BoundStore là type của toàn bộ combined store, CartSlice là type của slice này.
  • Slice có thể cross-reference nhau qua get(): const createOrderSlice = (set, get) => ({ checkout: () => { const { items } = get(); const { user } = get(); return api.order(user.id, items) } }).

Pitfall: tên state/action không được trùng giữa các slices — spread object sẽ overwrite.

Xem toàn bộ State Management cùng filter theo level & chủ đề con.

Mở danh sách State Management