라이브러리/zustand

[zustand] 상태 스토어를 로컬 스토리지에 저장하기

순코딩 2024. 12. 28. 01:04
import { AuthStoreType } from "@/types/store/auth.type";
import { create } from "zustand";
import { persist, PersistStorage } from "zustand/middleware";

// Custom storage for zustand
const customStorage: PersistStorage<AuthStoreType> = {
  getItem: (name) => {
    const item = localStorage.getItem(name);
    return item ? JSON.parse(item) : null;
  },
  setItem: (name, value) => {
    localStorage.setItem(name, JSON.stringify(value));
  },
  removeItem: (name) => {
    localStorage.removeItem(name);
  },
};

export const useAuthStore = create<AuthStoreType>()(
  persist(
    (set) => ({
      isLogin: false,
      setIsLogin: (value) => set({ isLogin: value }),
      uid: '',
      setUid: (value) => set({ uid: value || '' }),
      email: '',
      setEmail: (value) => set({ email: value || '' }),
    }),
    {
      name: 'auth-storage',
      storage: customStorage, // Custom storage
    }
  )
);

스토어 코드

 

export type AuthStoreType = {
  isLogin: boolean;
  setIsLogin: (value: boolean) => void;
  uid: string;
  setUid: (value: string | undefined) => void;
  email: string;
  setEmail: (value: string | undefined) => void;
};

스토어 타입 코드