import { combineReducers } from 'redux'; import { useSelector as useReduxSelector, TypedUseSelectorHook } from 'react-redux'; import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit'; import { persistReducer, persistStore } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import InfoReducer, { infoSlice } from './reducer/info'; import DataReducer, { dataSlice } from './reducer/data'; const rootReducer = combineReducers({ [infoSlice.name]: InfoReducer, [dataSlice.name]: DataReducer, }); const makeStore = () => { const persistConfig = { key: 'nextjs', storage, }; const persistedReducer = persistReducer(persistConfig, rootReducer); const store = configureStore({ reducer: persistedReducer, middleware: (getDefaultMiddleware: any) => getDefaultMiddleware({ serializableCheck: false, }), devTools: process.env.NODE_ENV !== 'production', }); return { ...store, __persistor: persistStore(store), }; }; export type AppStore = ReturnType; export type AppDispatch = typeof store.dispatch; export type AppState = ReturnType; export type AppThunk = ThunkAction; export const store: AppStore = makeStore(); export const dispatch: AppDispatch = store.dispatch; export const useSelector: TypedUseSelectorHook = useReduxSelector;