이것은 정답은 아니지만 시작하는 데 도움이됩니다. 나는 오래된 감속기를 버리지 않고, 단지 새로운 감속기 를 조합 목록에 추가하고 있습니다. 이전 리듀서를 버릴 이유가 없습니다. 심지어 가장 큰 앱에서도 수천 개의 다이내믹 모듈이 없을 것입니다. 높습니다.이 경우 애플리케이션에서 일부 리듀서를 분리 .
reducers.js
import { combineReducers } from 'redux';
import users from './reducers/users';
import posts from './reducers/posts';
export default function createReducer(asyncReducers) {
return combineReducers({
users,
posts,
...asyncReducers
});
}
store.js
import { createStore } from 'redux';
import createReducer from './reducers';
export default function configureStore(initialState) {
const store = createStore(createReducer(), initialState);
store.asyncReducers = {};
return store;
}
export function injectAsyncReducer(store, name, asyncReducer) {
store.asyncReducers[name] = asyncReducer;
store.replaceReducer(createReducer(store.asyncReducers));
}
route.js
import { injectAsyncReducer } from './store';
// Assuming React Router here but the principle is the same
// regardless of the library: make sure store is available
// when you want to require.ensure() your reducer so you can call
// injectAsyncReducer(store, name, reducer).
function createRoutes(store) {
// ...
const CommentsRoute = {
// ...
getComponents(location, callback) {
require.ensure([
'./pages/Comments',
'./reducers/comments'
], function (require) {
const Comments = require('./pages/Comments').default;
const commentsReducer = require('./reducers/comments').default;
injectAsyncReducer(store, 'comments', commentsReducer);
callback(null, Comments);
})
}
};
// ...
}
이것을 표현하는 더 깔끔한 방법이있을 수 있습니다. 단지 아이디어를 보여주는 것입니다.