TypeScript Zustand

Zustand slice와 selector 안정성

Zustand는 작은 store와 selector로 필요한 상태만 구독하게 만들 때 React 렌더링 비용과 타입 계약이 안정된다.

01

상태 모델 정의

전역이어야 하는 값과 컴포넌트 로컬이어야 하는 값을 먼저 나눈다.

global threshold
02

Action 포함

상태 변경 함수는 store 안에 두어 변경 경로를 한곳으로 모은다.

mutation API
03

Selector 사용

컴포넌트는 store 전체가 아니라 필요한 조각만 선택해 구독한다.

narrow subscribe
04

Persist·Devtools

저장소 지속화와 디버깅 middleware는 도메인 위험도에 맞게 붙인다.

middleware
Local vs Global
한 화면 내부 상태는 전역 store로 올리지 않는다. 전역화는 공유보다 결합도를 먼저 늘릴 수 있다.
범위 제어
Selector
객체를 매번 새로 반환하면 불필요한 렌더가 생긴다. shallow 비교나 개별 selector를 사용한다.
reference stability
Type
state와 action 타입을 함께 정의해 호출부가 변경 규칙을 알게 한다. set에 임의 객체를 흘려보내지 않는다.
액션 계약

Zustand 운영 기준

구독 범위 컴포넌트가 store 전체를 구독하지 않는다.
persist 필터 토큰이나 민감 정보가 localStorage에 저장되지 않는다.
초기화 로그아웃과 테스트에서 store를 재설정할 경로가 있다.

Store 타입

type AuthStore = {
  user: User | null;
  login(user: User): void;
  logout(): void;
};