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
StateCreatorfunction: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.