로그인 정보를 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;
'리액트' 카테고리의 다른 글
[리액트] React에서 Server-Sent Events(SSE)를 통한 실시간 알림 구현하기 (0) | 2023.06.27 |
---|---|
[리액트]중복 검색 요청 방지를 위한 debouncing 적용 (0) | 2023.06.27 |
[React] 리액트에서 이미지 파일과 json data를 함께 formData에 넣어 전송(post) (0) | 2023.05.31 |
리덕스툴킷(redux-toolkit)으로 리액트 로그인 (0) | 2023.05.30 |
useCallback과 React.Memo을 통한 불필요한 리렌디링 막기 (0) | 2023.05.24 |
댓글