redux-persist
!yarn add redux-persist
// src > modules > index.ts
import { combineReducers } from "redux";
import { persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
// localStorage에 저장하고 싶으면 import storage from 'redux-persist/lib/storage';
// session Storage에 저장하고 싶으면 import storageSession from 'redux-persist/lib/storage/session';
import etcReducer from "./etcSlice";
// (...이하 생략)
const persistConfig = {
key: "accToken", // Storage 에 저장할 때의 key 값 지정
storage, // localStorage 에 저장
whitelist: ["etcReducer"] // reducer 중에 "etcReducer" 만 저장 // 스토리지에 저장할 리덕스 모듈을 나열한다.
// blacklist: ["해당 리듀서"] // 스토리지에 저장하지 않을 리덕스 모듈을 나열
}
const rootReducer = combineReducers({
etcReducer,
...
})
export default persistReducer(persistConfig, rootReducer);
// persistReducer 함수 안에 persistConfig 와 rootReducer 를 넣어서 export default
// 이 뜻은 수정된 rootReducer 를 persistConfig 의 조건에 맞게 persist 하여 export
// rootReducer 에 persist 능력을 추가해준 것
// 즉, redux-persist와 리덕스 모듈 정보를 종합하여 persist 정보를 반환
// src > index.tsx
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Provider } from "react-redux";
import { configureStore } from '@reduxjs/toolkit'; // 여기선 따로 store.tsx 에 import 하지 않고 바로 index.tsx 에서 정의
import rootReducer from "./modules";
import { persistStore } from "redux-persist"; // redux store 생성
import { PersistGate } from "redux-persist/integration/react"; // redux store 에 유지시키고자 하는 데이터들이 정상적으로 저장되고 불러올 수 있도록 UI 렌더링을 지연시키는 역할
// PersistGate 로 루트 컴포넌트 감싸서 사용
// loading: UI 렌더링 지연시간. null 값으로 지정할 수 있으며, 단위는 ms
// persistor: 스토어 내용이 정의된 변수를 대입
// (...이하 생략)
// redux store 정의
const store = configureStore({
reducer: rootReducer,
(...이하 생략)
});
// redux store 생성
const persistor = persistStore(store);
// (...생략)
const container = document.getElementById('root')!;
const root = createRoot(container);
root.render(
<React.StrictMode>
<Provider store={store}>
<Router>
<PersistGate loading={null} persistor={persistor}>
<App />
</PersistGate>
</Router>
</Provider>
</React.StrictMode>
)
[참고]