UNPKG

nsgm-cli

Version:

A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project

68 lines (53 loc) 1.8 kB
import { useMemo } from 'react' import { combineReducers } from 'redux' import { configureStore, type EnhancedStore } from '@reduxjs/toolkit' import reducers from './reducers' let store: EnhancedStore | undefined const reducersKeysLen = Object.keys(reducers).length let combineReducer: any = () => ({}) if (reducersKeysLen > 0) { combineReducer = combineReducers({ ...reducers }) } export type RootState = ReturnType<typeof combineReducer> // 创建一个临时 store 实例来获取正确的 dispatch 类型 // eslint-disable-next-line @typescript-eslint/no-unused-vars const tempStore = configureStore({ reducer: combineReducer, middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: { ignoredActions: ['persist/PERSIST', 'persist/REHYDRATE'], }, }), }) export type AppDispatch = typeof tempStore.dispatch function initStore(initialState?: any): EnhancedStore { return configureStore({ reducer: combineReducer, preloadedState: initialState, devTools: process.env.NODE_ENV !== 'production', middleware: (getDefaultMiddleware) => getDefaultMiddleware({ serializableCheck: { ignoredActions: ['persist/PERSIST', 'persist/REHYDRATE'], }, }), }) } export const initializeStore = (preloadedState?: any): EnhancedStore => { let _store = store ?? initStore(preloadedState) if (preloadedState && store) { _store = initStore({ ...store.getState(), ...preloadedState, }) store = undefined } if (typeof window === 'undefined') return _store if (!store) store = _store return _store } export function useStore(initialState?: any): EnhancedStore { const store = useMemo(() => initializeStore(initialState), [initialState]) return store }