2
這是一個簡單的站點,利用react-router進行「代碼拆分」。我在這裏上傳了源代碼:https://github.com/wangjia184/log_viewer子路由加載但未呈現
在app.js中,定義了以下路由。
const rootRoute = {
component: 'div',
childRoutes: [ {
path: '/',
component: require('./routes/setting/view'),
childRoutes: [
require('./routes/indices')
]
}]
};
在routes/setting/view,存在將用戶重定向的鏈接/indices
class SettingUI extends React.Component {
render() {
return <Link to={`/indices`} activeClassName="active">Go to /indices</Link>
}
};
當我點擊這個鏈接,在地址欄中的URL改變了,getComponent
內routes/indices/index.js方法被觸發。
module.exports = {
path: 'indices',
getComponent(location, cb) {
require.ensure([], (require) => {
cb(null, require('./view'));
})
}
}
class IndicesUI extends React.Component {
componentWillMount() {
console.log('componentWillMount()');
}
componentDidMount() {
console.log('componentDidMount()');
}
componentWillUnmount() {
console.log('componentWillUnmount()');
}
render() {
console.log('render()');
return <h2>IndicesUI</h2>
}
}
console.log('IndicesUI is loaded');
module.exports = IndicesUI;
但實際上,組件已加載但未呈現。網頁瀏覽器控制檯中沒有錯誤,但顯示沒有更新。
目錄/build
包含由webpack生成的最終文件。
我很欣賞任何人看着這個。
修訂:
const loadContainerAsync = bundle => (location, cb) => {
bundle(component => {
cb(null, component);
});
};
ReactDOM.render((
<Router history={hashHistory}>
<Route path='/' component={DefaultView}>
<Route path="indices" getComponent={loadContainerAsync(require('bundle?lazy!./components/indices'))} />
</Route>
</Router>
), document.getElementById('app-container'));
是的,靜態路由的工作,但是這不是我想要的。我想要的是兒童路線的延遲加載。我是基於https://github.com/rackt/react-router/tree/master/examples/huge-apps –
的示例編碼謝謝,也許我沒有清楚地解釋這個問題。我期望組件被延遲加載,直到用戶被重定向到那裏。我更新了問題並找到了解決方案。 –