Store 구현
로컬 스토리지 설정 정의
const VERSION = 0;
/** local Storage config */
const localPersistConfig = {
key: `$${publicRuntimeConfig.RUNTIME_ENV}`,
version: VERSION,
storage,
whitelist: ["hotelRecentSearchStore"], // 로컬 스토리지에 유지 할 상태의 키 설정
migrate: createMigrate(migrations, {debug: true}),
};
Root Reducer 정의
const rootReducer = combineReducers({
hotelRecentSearchStore: storeRecentSearchHotel,
...
});
Persisted Reducer 정의
const persistedReducer = persistReducer(localPersistConfig, rootReducer);
Redux Store 정의
const store = configureStore({
reducer: persistedReducer,
devTools: ["development", "local"].indexOf(publicRuntimeConfig.RUNTIME_ENV) > -1,
middleware: getDefaultMiddleware =>
getDefaultMiddleware({
serializableCheck: false,
})
});
reducer
: 사용 할 리듀서를 지정합니다.devTools
: 개발 도구를 활성화할지 여부를 설정합니다. 개발 및 로컬 환경에서만 활성화됩니다.middleware
: Redux 미들웨어를 설정합니다. **serializableCheck
**를 비활성화하고 있습니다.Store 타입 및 Hook 정의
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
// Define Typed Hooks
export const useAppDispatch: () => AppDispatch = useDispatch;
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
export const persistor = persistStore(store);
export default store;
Reducer 구현
UUID 생성 함수
const uuidv4 = () =>
"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => {
const r = (Math.random() * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
최근 검색 내역 데이터 구조 정의
interface RecentSearchHotel {
... // 타입 지정
}
초기 상태 정의
const initialState: { recent: RecentSearchHotel[] } = {
recent: [],
};
Redux Slice 생성
const sliceStore = createSlice({
name: "recent-search-hotel",
initialState,
reducers: {
// 리듀서 함수들을 정의합니다.
},
});