Я пытаюсь сделать загрузку модала отдельным чанком, потом мне пришлось включить срез в магазине при запуске модала, но в консоли браузера появляется следующая ошибка
Я нашел эту статью в документации по разделению кода Redux Toolkit
reducerManager.ts:23 В магазине нет допустимого редуктора. Убедитесь, что аргумент, переданный в joinReducers, является объектом, значения которого являются редукторами.
import { combineReducers, Reducer, ReducersMapObject, UnknownAction} from "@reduxjs/toolkit";
import {ReducerManager, StateSchema, StateSchemaKey} from "./StateSchema.ts";
export function createReducerManager(initialReducers : ReducersMapObject): 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)
}
}
}
Я пытался печатать, но сокращение по-прежнему выдавало ошибку.
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 = combineReducers({
user: userReducer,
})
const reducerManager = createReducerManager(rootReducer);
const store = configureStore({
reducer: reducerManager.reduce,
preloadedState: initialState,
})
// @ts-ignore
store.reducerManager = reducerManager
return store
}
Тут опять ТС показал ошибку, но я решил ее проигнорировать, так как не понимаю, что от меня нужно
Сама ошибка такая отображается в консоли браузера
reducerManager.ts:23 В магазине нет допустимого редуктора. Убедитесь, что аргумент, передаваемый в joinReducers, является объектом, значения которого являются редукторами.
Именно этим я пытаюсь воспользоваться
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"})
}
})
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-not-have