react-redux를 사용하여 상태 관리를 하여 진행하는 프로젝트 도중 새로고침으로 인한 상태 값의 증발이 발생하게 되었습니다. 이것에 대한 대응 방안으로 redux-persist에서는 localStorage 또는 session에 저장하고자 하는 reducer state를 저장하여, 새로고침 하여도 저장공간에 있는 데이터를 redux에 불러오는 형식으로 이루어집니다. 예시는 아래와 같습니다.
# Contents
- redux-persist
# 라우터 적용
라이브러리를 아래 명령어를 통해 설치합니다.
npm install --save redux-persist
그 다음엔, reducer가 정의된 코드를 다음과 같이 수정하였습니다.
- localStorage에 저장하고 싶으면 import storage from 'redux-persist/lib/storage
- session Storage에 저장하고 싶으면 import storageSession from 'redux-persist/lib/storage/session
아래 코드는 reducer/index.js 의 내용입니다.
import { combineReducers } from "redux";
import bizUrlSelector from "./bizUrlSelector";
import ibizReducer from "./ibizReducer";
import menuSelector from "./menuSelector";
import storage from "redux-persist/lib/storage";
import { persistReducer } from "redux-persist";
// localStorage에 저장하고 싶으면 import storage from 'redux-persist/lib/storage
// session Storage에 저장하고 싶으면 import storageSession from 'redux-persist/lib/storage/session
const persistConfig = {
key: "root",
storage,
whitelist: ["ibizReducer"],
// blacklist -> 그것만 제외합니다
};
export default function reducer() {
const rootReducer = combineReducers({ bizUrlSelector, menuSelector, ibizReducer });
return persistReducer(persistConfig, rootReducer);
}
등록된 persistReducer의 사용법은 아래와 같습니다.
아래 코드는 index.js 의 내용입니다.
import React from "react";
import ReactDOM from "react-dom";
import "./css/reset.css";
import "./css/code.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
import { createStore, applyMiddleware } from "redux";
import { Provider } from "react-redux";
import reducer from "./modules/Index";
import ReduxThunk from "redux-thunk";
import logger from "redux-logger";
import { persistStore } from "redux-persist";
import { PersistGate } from "redux-persist/integration/react";
const myReducer = reducer();
const store = createStore(myReducer, applyMiddleware(ReduxThunk, logger));
const persistor = persistStore(store);
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<App />
</PersistGate>
</Provider>
</BrowserRouter>
</React.StrictMode>,
document.getElementById("root")
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
'오픈소스 > 노드' 카테고리의 다른 글
[Node] React 정리(27) - 슬라이더 라이브러리 - react-slick (0) | 2021.11.10 |
---|---|
[Node] React 정리(26) - Redirect (0) | 2021.11.03 |
[Node] React 정리(24) - 리액트 라우터 (0) | 2021.10.27 |
[Node] React 정리(23) - 리덕스 미들웨어 [redux-thunk, redux-sega] (0) | 2021.10.27 |
[Node] React 정리(23) - 리덕스 모듈화 (0) | 2021.10.26 |