본문 바로가기
리액트

새로고침하면 휘발하는 redux, redux-persist 로 유지하기

by 지 요니 2023. 6. 9.

로그인 정보를  redux-toolkit을 사용해 전역으로 관리하였다. 로그인 직후에는 정상 작동되었지만

새로고침시 리덕스의 데이터가 휘발되는 문제가 발생하였다.

 

이를 해결하기위해 토큰 정보처럼 localStorage나 sessionStorage에 저장해 필요할 때마다 꺼내 사용하는 redux-persist를 사용하였다!

 

1. 설치

yarn add redux-persist

 

2. reducer에 persist store 정의

나는 sessionStorage에 저장하기 위해 import storageSession from 'redux-persist/lib/storage/session 를 사용했다.

 

import {
  combineReducers,
  configureStore,
  getDefaultMiddleware,
} from "@reduxjs/toolkit";
import { persistReducer } from "redux-persist";
import storageSession from "redux-persist/es/storage/session";
import user from "../modules/user";

const reducers = combineReducers({
  user: user,
});
const persistConfig = {
  key: "root",				// reducer의 어느 지점에서부터 데이터를 저장할 건지
  storage: storageSession,	//sessionStorage에 저장
  whitelist: ["user"],		// blacklist: 제외할 것 지정
};
const persistedReducer = persistReducer(persistConfig, reducers);
const store = configureStore({
  reducer: persistedReducer,
  middleware: getDefaultMiddleware({
    serializableCheck: false,
  }),
});

export default store;

 

3. persist store 사용

import { Provider } from "react-redux";
import Router from "./shared/Router";
import { GlobalStyles } from "./styles/GlobalStyles";
import store from "./redux/config/configStore";
import { PersistGate } from "redux-persist/integration/react";
import { persistStore } from "redux-persist";

export let persistor = persistStore(store); //새로 고침, 종료해도 지속될 store 생성
function App() {
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <GlobalStyles />
        <Router />
      </PersistGate>
    </Provider>
  );
}

export default App;

댓글