cra-template-bod
Version:
The advanced TypeScript template for Bod CLI.
43 lines (37 loc) • 1.39 kB
text/typescript
import type { Action, ThunkAction } from '@reduxjs/toolkit'
import { combineSlices, configureStore } from '@reduxjs/toolkit'
import { counterSlice } from '../containers/Counter/slice'
// `combineSlices` automatically combines the reducers using
// their `reducerPath`s, therefore we no longer need to call `combineReducers`.
const rootReducer = combineSlices(counterSlice)
// Infer the `RootState` type from the root reducer
export type RootState = ReturnType<typeof rootReducer>
/**
* The store setup is wrapped in `makeStore` to allow reuse
* when setting up tests that need the same store config
* @param {Partial<RootState>} preloadedState preload state
* @returns {AppStore} app store
*/
export function makeStore(preloadedState?: Partial<RootState>) {
const store = configureStore({
reducer: rootReducer,
// Adding the api middleware enables caching, invalidation, polling,
// and other useful features of `rtk-query`.
middleware(getDefaultMiddleware) {
return getDefaultMiddleware()
},
preloadedState,
})
return store
}
export const store = makeStore()
// Infer the type of `store`
export type AppStore = typeof store
// Infer the `AppDispatch` type from the store itself
export type AppDispatch = AppStore['dispatch']
export type AppThunk<ThunkReturnType = void> = ThunkAction<
ThunkReturnType,
RootState,
unknown,
Action
>