Middleware persist từ 'zustand/middleware' serialize state thành JSON, lưu vào storage và rehydrate khi app khởi động.
ts
const useAuthStore = create(
persist(
(set) => ({ user: null, theme: 'light', loading: false }),
{
name: 'auth-storage',
partialize: (s) => ({ user: s.user, theme: s.theme }),
storage: createJSONStorage(() => sessionStorage),
version: 2,
migrate: (persistedState, version) =>
version === 1 ? { ...persistedState, newField: 'default' } : persistedState,
onRehydrateStorage: () => (state, error) => {
if (error) console.error('hydration failed', error)
},
},
),
)namelà storage key, bắt buộc.partializechọn phần state cần lưu — bỏ qua loading/error state cho gọn.storageđổi engine:sessionStorage, hoặc AsyncStorage cho React Native.version+migratexử lý thay đổi cấu trúc state giữa các bản phát hành.
Lưu ý: persist không deep merge — đổi cấu trúc state mà quên migrate thì rehydrate ra state không hợp lệ.