Skip to content

Latest commit

 

History

History
108 lines (77 loc) · 2.88 KB

File metadata and controls

108 lines (77 loc) · 2.88 KB

Zustand 스토어 개선 사항

✅ 완료된 개선 사항

1. 타입 에러 수정

  • sidebar.tsx: setSidebarOpen 함수 사용 수정
  • reservation.ts: response.data.postIdresponse.postId 수정
  • reservation.ts: response.data.statusresponse.status 수정
  • notification.ts: 반환 타입 일관성 수정

2. 필터 스토어 타입 일치

  • PostListFilters 타입과 실제 필터 옵션 일치
  • minPrice, maxPriceminDeposit, maxDeposit, minFee, maxFee로 수정
  • keyword, receiveMethod, sort, order 필드 추가

📋 현재 상태

스토어 구조

  1. authStore - 인증 상태 관리 ✅

    • user, isAuthenticated 상태
    • setAuth, setUser, logout 액션
    • localStorage persist 적용
  2. uiStore - UI 상태 관리 ✅

    • 모달, 사이드바, 토스트, 로딩 상태
    • 모든 액션 구현 완료
  3. filterStore - 필터 상태 관리 ✅

    • 게시글 필터, 검색어, 정렬 옵션
    • localStorage persist 적용
    • 타입 일치 확인 완료
  4. selectionStore - 선택 상태 관리 ✅

    • 게시글, 예약 선택 관리
    • 모든 액션 구현 완료

UI 컴포넌트 통합

  • Modal 컴포넌트 생성
  • Toast 컴포넌트 생성
  • Sidebar 컴포넌트 생성
  • GlobalLoading 컴포넌트 생성
  • layout.tsx에 Toast, GlobalLoading 통합

🔍 추가 개선 가능 사항 (선택적)

1. 성능 최적화

// 현재: 전체 스토어 구독
const store = useAuthStore();

// 개선: 필요한 상태만 선택적 구독
const user = useAuthStore((state) => state.user);
const isAuthenticated = useAuthStore((state) => state.isAuthenticated);

2. 에러 상태 관리

필요시 에러 상태를 관리하는 스토어 추가 가능:

interface ErrorState {
  errors: Record<string, string[]>;
  setError: (key: string, messages: string[]) => void;
  clearError: (key: string) => void;
  clearAll: () => void;
}

3. Modal 컴포넌트 개선

현재 Modal은 props로 children을 받지만, uiStoremodalContent를 사용하도록 개선 가능:

// 현재: props로 children 전달
<Modal title="제목">내용</Modal>;

// 개선: 스토어를 통한 모달 관리
const { openModal } = useUIStore();
openModal(<ModalContent />);

4. 필터 스토어 확장

예약, 리뷰 등 다른 도메인의 필터도 관리:

interface FilterState {
  postFilters: PostListFilters;
  reservationFilters: ReservationListFilters;
  // ...
}

✅ 결론

현재 Zustand 스토어는 완전히 구현되었고 타입 안전하게 작동합니다.

  • 모든 스토어가 올바르게 구현됨
  • 타입 에러 모두 수정됨
  • UI 컴포넌트와 통합 완료
  • 문서화 완료

추가 개선 사항은 프로젝트 진행 중 필요에 따라 추가할 수 있습니다.