redux-toolkit 세팅

뱀기·2022년 10월 18일
1

리팩토링

목록 보기
7/8

nextjs + typescript + jest + storybook + eslint + prettier + styled-components + yarn berry + RTK 거의 다 했다...!

<reference types="redux-persist" />
  • store 생성
//store.ts
import { combineReducers, PreloadedState } from 'redux';
import { configureStore } from '@reduxjs/toolkit';
import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist';
import storage from 'redux-persist/lib/storage'; // defaults to localStorage for web

import counterReducer from '../features/counter/counterSlice';

const persistConfig = {
  key: 'root',
  storage,
};
const rootReducer = combineReducers({
  counter: counterReducer,
});

const persistedReducer = persistReducer(persistConfig, rootReducer);

export const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
});

export const persistor = persistStore(store);

export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
//_app.tsx
import React from 'react';
import '../styles/globals.css';
import { Provider } from 'react-redux';
import type { AppProps } from 'next/app';
import { store, persistor } from '../features/store';
import { PersistGate } from 'redux-persist/integration/react';

const MyApp = ({ Component, pageProps }: AppProps) => (
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      <Component {...pageProps} />
    </PersistGate>
  </Provider>
);

export default MyApp;
  • counter 관련 코드는 생략하겠음 공식 문서에 있는 튜토리얼 참고!

1개의 댓글

comment-user-thumbnail
2023년 5월 11일

안녕하세요. wrapper를 사용하지 않는 이유를 여쭤봐도 될까요? 클라이언트 상태 관리에만 사용해서인가요?

글 잘 봤습니다. 감사합니다.

답글 달기