상태 관리
이 페이지에서는 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. 액션에 올바르게 타입 지정하기
슬라이스 테스트
다음 단계
마지막 업데이트