// store.ts
import { configureStore } from '@reduxjs/toolkit';
import usersReducer from './usersSlice';
import authReducer from './authSlice';
export const store = configureStore({
reducer: { users: usersReducer, auth: authReducer },
});
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
// index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import router from './Router';
import { Provider } from 'react-redux';
import { store } from './store/store';
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
// <React.StrictMode>
<Provider store={store}>
<RouterProvider router={router} />
</Provider>
// </React.StrictMode>
);
$ yarn add redux-persist @types/redux-persist
// store.ts
import { combineReducers } from "@reduxjs/toolkit";
const reducers = combineReducers({
users: usersReducer,
auth: authReducer,
});
// store.ts
import { combineReducers } from "@reduxjs/toolkit";
import storage from 'redux-persist/lib/storage';
const reducers = combineReducers({
users: usersReducer,
auth: authReducer,
});
const persistConfig = {
key: 'root', // 저장되는 값에 대한 식별자
storage, // 로컬스토리지에 저장, 그 외 SessinStorage, AsyncStorage
whitelist: ['users', 'auth'], // target: reducer 이름 기입
};
const persistedReducer = persistReducer(persistConfig, reducers);
export const store = configureStore({
reducer: persistedReducer,
});
export const persistor = persistStore(store);
// index.tsx
import { persistor } from './store/store';
import { PersistGate } from 'redux-persist/integration/react';
<PersistGate loading={null} persistor={persistor}>
<RouterProvider router={router} />
</PersistGate>
// store.ts
import { configureStore, combineReducers } from '@reduxjs/toolkit';
import usersReducer from './usersSlice';
import authReducer from './authSlice';
import storage from 'redux-persist/lib/storage';
import { persistReducer, persistStore } from 'redux-persist';
const reducers = combineReducers({
users: usersReducer,
auth: authReducer,
});
const persistConfig = {
key: 'root',
storage,
whitelist: ['users', 'auth'],
};
const persistedReducer = persistReducer(persistConfig, reducers);
export const store = configureStore({
reducer: persistedReducer,
});
export const persistor = persistStore(store);
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
// index.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import router from './Router';
import { Provider } from 'react-redux';
import { store, persistor } from './store/store';
import { PersistGate } from 'redux-persist/integration/react';
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
// <React.StrictMode>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<RouterProvider router={router} />
</PersistGate>
</Provider>
// </React.StrictMode>
);
redux-logger
& redux-thunk
설치$ yarn add redux-logger redux-thunk
$ yarn add @types/redux-logger --dev
middleware
추가// store.ts
import logger from 'redux-logger';
import thunk from 'redux-thunk';
export const store = configureStore({
reducer: persistedReducer,
middleware: [thunk, logger],
});
또는
// store.ts
import logger from 'redux-logger';
import thunk from 'redux-thunk';
export const store = configureStore({
reducer: persistedReducer,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
thunk: true,
serializableCheck: false,
}).concat(thunk, logger),
});
짧은 버전은 짧고 간단하게 사용 가능
긴 버전은 기본 미들웨어 설정을 수정할 수 있기 때문에 더 유연한 컨트롤 가능