간단한 todolist가 완성되었다.
허나 redux는 웹 브라우저 창을 닫거나 새로고침 시 state 가 리셋되기 때문에, 웹 스토리지에 저장하는 방법을 찾았다.
npm i redux-persist
import storage from 'redux-persist/lib/storage
import storageSession from 'redux-persist/lib/storage/session
const toDos = createSlice({
name: "toDosReducer",
initialState,
reducers: {
add: (state, action) => {
state.push({ text: action.payload, id: Date.now() });
},
remove: (state, action) => {
return state.filter(toDo => toDo.id !== action.payload);
},
},
});
export const { add, remove } = toDos.actions;
export const store = configureStore({ reducer: toDos.reducer });
➕export const rootReducer = combineReducers({
toDos: toDos.reducer,
});
➕export const persistedReducer = persistReducer(persistConfig, rootReducer);
➕export const store = configureStore({
reducer: persistedReducer,
});
combineReducer
configureStore
내부에서 해당 기능을 처리해주므로 사용하지 않았지만 persistReducer
에 한개의 reducer
를 전달하고,configureStore
에 전달해야하여 사용했다.persistReducer(config, reducer)
key
와 storage
필수로 필요로하며, whitelist
,blacklist
등의 값을 지정할 수 있다.add
, remove
모두 포함이기에 작성하지 않았다!import { persistStore } from "redux-persist";
import { PersistGate } from "redux-persist/integration/react";
const persistor = persistStore(store);
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<StylesProvider injectFirst>
<App />
</StylesProvider>
</PersistGate>
</Provider>
);
persistStore
PersistGate
그대로 존재하는 점 확인~! 😭