Да, вы можете.Мы используем его с динамическим импортом и хорошо работает.Мы используем с реагирующими хуками .
используем store.replaceReducer
https://redux.js.org/api/store#replacereducernextreducer
в configureStore (или любом файле, когда вы вызываете createStore
из redux)
const store = createStore(/*...*/)
добавить
store.injectedReducers = {};
// Реестр редуктора
и создать новый файл с хуком injectReducer.
const useInjectReducer reducer => {
const store = useStore();
const key = Object.keys(reducer)[0];
if (
Reflect.has(store.injectedReducers, key) &&
store.injectedReducers[key] === reducer[key]
) {
return;
}
store.injectedReducers = {
...store.injectedReducers,
...reducer
};
store.replaceReducer(combineReducers(store.injectedReducers));
}
, и вы сможете использовать его в реакцииПриложение:
export const TodoPage = () => {
useInjectReducer({ [REDUCER_NAME]: TodoReducer });
/*...*/
}
, если вы используете рендеринг на стороне сервера, вы должны быть уверены, что лексем не очищает состояния для отсутствующих редукторов перед динамическим импортом.Вы можете создать dummyReducers, чтобы предотвратить это.
const dummyReducers = Object.keys(initialState).reduce((acc, current) => {
acc[current] = (state = null) => state
return acc;
}, {});
и добавить это для:
const store = createStore(
combineReducers(dummyReducers),
initialState
)
Мы используем тот же шаблон для Inject Sagas.