Zustand는 React에서 전역 상태를 간단하게 관리할 수 있도록 도와주는 작은 상태 관리 라이브러리이다.
Zustand는 전역 상태(store)를 만들고, 그 상태를 React 컴포넌트에서 쉽게 사용할 수 있게 한다.
Stor: 데이터를 저장하는 객체. 이상태에 따라 UI가 업데이트 된다.
Setter 함수: 상태를 변경할 때 사용하는 함수.
Getter 함수: 상태 값을 가져오는 함수.
Redux, Recoil에 비해 코드가 매우 간결하고 학습 난이도 낮음
Context API 없이도 상태를 전역에서 공유 가능
모듈화/테스트에 강하고, 가볍고 빠름
리렌더링 제어가 용이 (선택적 구독)
import { create } from 'zustand'; // zustand의 create 함수를 사용해 store 생성
import { v4 as uuidv4 } from 'uuid'; // 고유한 id를 생성해주는 uuid 라이브러리
import { ReactNode } from 'react'; // ReactNode는 React의 JSX 요소를 타입으로 사용하기 위함
const uuid = uuidv4(); // 고유한 UUID를 생성
interface ModalStoreState {
isModalOpen: boolean; // 모달이 열려 있는지 여부
modal: ReactNode | null; // 모달 컴포넌트 (JSX)
modalId: string | null; // 모달의 고유 ID
setModalOpen: (modal: ReactNode) => void; // 모달 열기 함수
setModalClose: () => void; // 모달 닫기 함수
}
이 부분은 Zustand에서 관리할 모달 상태와 함수들을 정의한 인터페이스이다.
const useModalStore = create<ModalStoreState>((set) => ({
isModalOpen: false, // 초기값: 모달 닫힘
modal: null, // 초기값: 표시할 모달 없음
modalId: null, // 초기값: 모달 ID 없음
setModalOpen: (modal) => set({ isModalOpen: true, modalId: uuid, modal }), // 모달 열기
setModalClose: () => set({ isModalOpen: false, modalId: null, modal: null }), // 모달 닫기
}));
여기서는 Zustand store를 정의한다. set을 통해 상태를 업데이트 할 수 있게 해준다.