Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스 데브코스 프론트엔드
- flex
- 프로그래머스 데브코스
- Spacer
- vue 이벤트 수신
- postcss
- SCSS extend
- SCSS forward
- vue 지역 컴포넌트
- Vue
- 이벤트 수식어
- netlify redirect
- KDT 프로그래머스
- 다른컴퓨터에서 git사용
- 프로그래머스 K_Digital Training
- 쌓임맥락
- 리스트 렌더링
- nextjs사용법
- git 같은계정 다른 컴퓨터
- SCSS import
- SCSS use
- 폼 입력 바인딩
- 고양이 사진 검색기
- vue mixin
- 프로그래머스 프론트엔드 데브코스
- 리액트
- KDT 프로그래머스 데브코스 프론트엔드
- react next
- vuex map
- intersection opserver
Archives
- Today
- Total
혼자 적어보는 노트
[Redux] Redux-Persist 본문
state를 통해 상태관리를 하면 앱을 종료하거나 새로고침 시에
저장되어 있던 state들이 사라지게 된다.
이 때 state를 유지하기 위해 localStorage나 sessionStorage를 사용하는데
Redux-Persist를 사용하여 설정해두면 알아서 localstorage나 sessionstorage에 state의 상태를 저장시켜주고
꺼내씀으로써 state를 유지시킬 수 있다.
1. 설치
yarn add -D redux-persist
타입스크립트 적용 시 -D @types/redux-presist를 설치해주어야 한다.
2. 사용방법
store/index.js
import { tasks } from "./tasks";
import { combineReducers, createStore } from "redux";
import { persistReducer, persistStore } from "redux-persist";
import session from "redux-persist/lib/storage/session";
const persistConfig = {
key: "root",
storage: session,
// 저장하는 곳
// session -> sessionStorage
// storage -> localStorage
whitelist: ["tasks"],
// 저장할 reducer 선택
// 이 부분을 지정하지 않으면 reducer의 상태 전부 저장하게 된다.
// 반대의 개념으로 blacklist가 있다.
};
const combinedReducer = combineReducers({ tasks });
const rootReducer = persistReducer(persistConfig, combinedReducer);
// 기존의 reducer를 pesistReducer으로 감싸주어야 한다.
export const store = createStore(rootReducer);
export const persistor = persistStore(store);
// store 또한 pesistStore으로 감싸주어야 한다.
여러 리듀서 중에 특정 리듀서를 어느 곳에 저장시킬 지 지정해 둘 수 있다.
src/index.js
import React from "react";
import App from "./App";
import ReactDOM from "react-dom/client";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { store, persistor } from "./store";
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
<Provider store={store}>
<PersistGate persistor={persistor}>
<App />
</PersistGate>
</Provider>
);
Provider 안에 PersistGate를 래핑하여 store에서 생성한 persistor를 전달해 주면 끝!
위처럼 처리하게 되면 따로 Storage에 관련된 코드를 컴포넌트마다 추가로 작성하지 않고도
데이터를 쉽게 저장 시킬 수 있다.
단점의 경우, 특정 reducer 내부의 특정 값만 Storage에 담지 못한다는 점이다.
예를들어 tasks reducer의 state가 {id, content, complete}를 담고 있을 때
id값만 저장을 하고 싶어도 tasks의 state모두 Storage에 저장된다.
'React' 카테고리의 다른 글
[React] 아이폰 HEIC 이미지 JPEG로 변환 (0) | 2022.07.08 |
---|---|
[React] 이미지 업로드 시 이미지 압축 (0) | 2022.07.06 |
[React] 리액트에서 디바운싱 구현하기 (0) | 2022.03.14 |
[React] useRef() 여러 개 한번에 관리하기 (0) | 2022.03.11 |
더미데이터(dummy data) 만들기 / 더미 이미지 사이트 (0) | 2022.03.10 |
Comments