Проблема с redux, не видет store. reducer Manager.ts:23 Store does not have a valid reducer
Пытаюсь сделать чтоб модалка загружалась отдельным чанком и потом пришлось из-за этого менять slice
Нашел такую статью в документации в Redux Toolkit code spliting
import { combineReducers, Reducer, ReducersMapObject, UnknownAction} from "@reduxjs/toolkit";
import {ReducerManager, StateSchema, StateSchemaKey} from "./StateSchema.ts";
export function createReducerManager(initialReducers : ReducersMapObject<StateSchema>): ReducerManager {
const reducers = { ...initialReducers }
let combinedReducer = combineReducers(reducers)
let keysToRemove: StateSchemaKey[] = []
return {
getReducerMap: () => reducers,
reduce: (state: StateSchema, action : UnknownAction) => {
if (keysToRemove.length > 0) {
state = { ...state }
for (let key of keysToRemove) {
delete state[key]
}
keysToRemove = []
}
return combinedReducer(state, action)
},
add: (key : StateSchemaKey, reducer : Reducer) => {
if (!key || reducers[key]) {
return
}
reducers[key] = reducer
combinedReducer = combineReducers(reducers)
},
remove: (key : StateSchemaKey) => {
if (!key || !reducers[key]) {
return
}
// Remove it from the reducer mapping
delete reducers[key]
// Add the key to the list of keys to clean up
keysToRemove.push(key)
// Generate a new combined reducer
combinedReducer = combineReducers(reducers)
}
}
}
Пытался типизировать, но reduce все равно оставался ошибкой.
import {combineReducers, configureStore, ReducersMapObject} from "@reduxjs/toolkit";
import {StateSchema} from "@/app/StoreProvider/config/StateSchema.ts";
import {userReducer} from '@/entities/User'
import {createReducerManager} from "./reducerManager.ts";
export function createReduxStore(initialState?: StateSchema) {
// @ts-ignore
const rootReducer: ReducersMapObject<StateSchema> = combineReducers({
user: userReducer,
})
const reducerManager = createReducerManager(rootReducer);
const store = configureStore<StateSchema>({
reducer: reducerManager.reduce,
preloadedState: initialState,
})
// @ts-ignore
store.reducerManager = reducerManager
return store
}
Вот тут снова TS показывал на ошибку, но я решил на это забить так как не понимаю че от меня нужно
Сама ошибка которая выводит в консоль браузера
reducerManager.ts:23 Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.
Вот тут я пытаюсь воспользоваться
const store = useStore() as ReduxStoreWithManager
const username = useSelector(getLoginUsername);
const password = useSelector(getLoginPassword);
const isLoading = useSelector(getLoginIsLoading);
const error = useSelector(getLoginError);
useEffect(() => {
store.reducerManager.add('loginForm', loginReducer)
dispatch({type : "@INIT LOGIN_FORM"})
return () => {
store.reducerManager.remove('loginForm');
dispatch({type : "@REMOVE LOGIN_FORM"})
}
})