For the complete documentation index, see llms.txt. This page is also available as Markdown.

상태 관리

이 페이지에서는 Redux Toolkit의 다음을 사용하여 UI 및 로컬 상태 관리를 위한 Redux 슬라이스를 만드는 방법을 다룹니다. createSlice 및 createEntityAdapter.

슬라이스와 RTK Query를 언제 사용할까

상태에 맞는 올바른 도구를 선택하세요:

상태 유형
도구
예시

원격 데이터 (서버 소유)

RTK Query

사용자 프로필, NFT, 카탈로그 항목, 주문

UI 상태 (클라이언트 소유)

createSlice

필터, 모달, 보기 기본 설정, 폼 상태

정규화된 컬렉션

createEntityAdapter

정렬/필터링된 목록, 낙관적 업데이트

기본 슬라이스 만들기

다음을 사용하세요 createSlice 간단한 UI 상태에는:

// src/features/ui/ui.slice.ts
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import type { RootState } from '@/app/store';

interface UIState {
  sidebarOpen: boolean;
  modalOpen: boolean;
  viewMode: 'grid' | 'list';
  theme: 'light' | 'dark';
}

const initialState: UIState = {
  sidebarOpen: true,
  modalOpen: false,
  viewMode: 'grid',
  theme: 'light',
};

const uiSlice = createSlice({
  name: 'ui',
  initialState,
  reducers: {
    // 불리언 토글
    sidebarToggled(state) {
      state.sidebarOpen = !state.sidebarOpen;
    },
    
    // 특정 값 설정
    modalOpened(state) {
      state.modalOpen = true;
    },
    
    modalClosed(state) {
      state.modalOpen = false;
    },
    
    // 페이로드 액션
    viewModeChanged(state, action: PayloadAction<'grid' | 'list'>) {
      state.viewMode = action.payload;
    },
    
    themeChanged(state, action: PayloadAction<'light' | 'dark'>) {
      state.theme = action.payload;
    },
    
    // 여러 속성
    uiReset() {
      return initialState;
    },
  },
});

// 액션 내보내기
export const {
  sidebarToggled,
  modalOpened,
  modalClosed,
  viewModeChanged,
  themeChanged,
  uiReset,
} = uiSlice.actions;

// 리듀서 내보내기
export default uiSlice.reducer;

// 셀렉터 내보내기
export const selectSidebarOpen = (state: RootState) => state.ui.sidebarOpen;
export const selectModalOpen = (state: RootState) => state.ui.modalOpen;
export const selectViewMode = (state: RootState) => state.ui.viewMode;
export const selectTheme = (state: RootState) => state.ui.theme;

엔티티 어댑터 사용하기

정규화된 컬렉션(ID가 있는 목록)에는 다음을 사용하세요 createEntityAdapter:

엔티티 어댑터 메서드

상태 변이

생성된 셀렉터

복잡한 상태 예시

여러 관심사를 하나의 슬라이스에 결합하기:

메모이즈된 셀렉터

다음을 사용하세요 createSelector Reselect를 사용하여 계산/파생 상태를 만듭니다:

추가 리듀서가 있는 비동기 로직

슬라이스에서 RTK Query 또는 비동기 thunk 응답을 처리하세요:

모범 사례

1. 상태는 최소한으로 유지하기

2. Immer 친화적인 변이 사용

3. 리듀서를 논리적으로 구성하기

4. 액션에 올바르게 타입 지정하기

슬라이스 테스트

다음 단계

마지막 업데이트