React-router: getChildRoutes не запускается во вложенном PlainRoute
Для справки я использую стартовый комплект React-Redux ( https://github.com/davezuko/react-redux-starter-kit) в качестве макета базового проекта.
У меня есть маршрут с именем TSP
и я использую getComponent
и редукс connect()
внедрить редуктор в компонент контейнера, который, я надеюсь, пройдет children
в подпорках.
getChildRoutes
в определении маршрута TSP никогда не вызывается.
Конфигурация корневого маршрутизатора:
import ApplicationLayout from '../layouts/ApplicationLayout';
import Home from './Home';
export const createRoutes = (store) => {
const routes = {
path: '/',
component: ApplicationLayout,
indexRoute: Home,
getChildRoutes (location, next) {
require.ensure([], (require) => {
next(null, [
require('./TSP').default(store),
require('./Home').default,
]);
});
}
};
return routes;
};
export default createRoutes;
Конфигурация вложенного маршрутизатора (TSP):
import { injectReducer } from '../../store/reducers';
import Overview from './routes/Overview';
export default (store) => ({
path: '/tsp/:id',
indexRoute: Overview,
getComponent (nextState, next) {
require.ensure([
'./containers/TSPContainer',
'./modules/tsp'
], (require) => {
const TSP = require('./containers/TSPContainer').default;
const reducer = require('./modules/tsp').default;
injectReducer(store, { key: 'tsp', reducer });
next(null, TSP);
});
},
getChildRoutes (location, next) {
debugger
require.ensure([], (require) => {
next(null, [
// Provide store for async reducers and middleware
require('./routes/Offers').default(store),
require('./routes/Reviews').default(store)
]);
});
}
});
Я никогда не добираюсь до debugger
в getChildRoutes
,
Любая помощь приветствуется, и если есть еще файлы, необходимые для просмотра, я могу добавить их.
2 ответа
Вы синхронно загрузили ./TSP
а также ./Home
определения маршрута? Если нет, я не думаю, require.ensure
будет работать без указания этих модулей в качестве зависимостей.
Так:
getChildRoutes (location, next) {
require.ensure([
'./TSP',
'./Home'
], (require) => {
next(null, [
require('./TSP').default(store),
require('./Home').default,
]);
});
}
Догадаться. мой IndexRoute
в выше TSP
Конфигурация вложенного маршрутизатора была функцией, а не объектом (я предполагаю, что реагирующий маршрутизатор ожидал, что indexRoute будет объектом до запуска getChildRoutes
.)
Решением было назначить разрешенный routeConfig для Overview
в indexRoute
,
TSP/index.js
import { injectReducer } from '../../store/reducers';
export default (store) => ({
path: '/tsp/:id',
indexRoute: require('./routes/Overview').default(store),
getComponent (nextState, next) {
require.ensure([
'./containers/TSPContainer',
'./modules/tsp'
], (require) => {
const TSP = require('./containers/TSPContainer').default;
const reducer = require('./modules/tsp').default;
injectReducer(store, { key: 'tsp', reducer });
next(null, TSP);
});
},
getChildRoutes (location, next) {
require.ensure([], (require) => {
next(null, [
// Provide store for async reducers and middleware
require('./routes/Offers').default(store),
require('./routes/Reviews').default(store)
]);
});
}
});
TSP/routes/Overview/index.js
export default (store) => ({
getComponent (nextState, next) {
require.ensure([
'./components/OverviewView'
], (require) => {
const Overview = require('./components/OverviewView').default;
next(null, Overview);
});
}
});