我有一个使用 React、Redux 和 React-Router 1.0.0-rc1 的小型原型。原型使用 Webpack 进行代码拆分。它目前使用getComponents
并getChildRoutes
异步加载其他路由,如下所示:
module.exports = {
path: 'donations',
getChildRoutes(location, cb) {
require.ensure([], (require) => {
cb(null, [
require('./routes/Donation'),
]);
});
},
getComponent(location, cb) {
require.ensure([], (require) => {
cb(null, require('./components/Donations'));
});
}
};
这工作正常,直到我点击嵌套路由donations/:id
,它看起来像:
module.exports = {
path: ':id',
getComponents (location, cb) {
console.log('got it', cb); // debugging
require.ensure([], (require) => {
console.log('called it', cb); // debugging
cb(null, require('./components/Donation'));
});
}
};
当我导航到这条路线(例如/donations/123
:)时,触发了路线,加载了 bundle.js 文件,并且两个console.log
s 都出现在控制台中,因此我知道该路线已加载到内存中。但是,该组件未安装和渲染。
console.log 的结果:
got it function (error, value) {
done(index, error, value);
}
called it function (error, value) {
done(index, error, value);
}
一层深的异步路由很好,但是嵌套过去是行不通的。组件已加载,但似乎并未执行。
返回的组件用 Redux 包装,Connect
如下所示:
function Connect(props, context) {
_classCallCheck(this, Connect);
_Component.call(this, props, context);
this.version = version;
this.store = props.store || c…
更新:问题已解决
这个问题很简单。由于这是一个嵌套路由,Router 将嵌套组件传递给它的父级 in this.props.children
,我没有检查它。将其归结为对 1.0.0-rc1 的(稀疏)文档的误解。