import React, { Component } from 'react'
export default class Bundle extends React.Component {
state = {
// short for "module" but that's a keyword in js, so "mod"
mod: null
}
componentWillMount() {
this.load(this.props)
}
componentWillReceiveProps(nextProps) {
if (nextProps.load !== this.props.load) {
this.load(nextProps)
}
}
load(props) {
this.setState({
mod: null
})
props.load((mod) => {
this.setState({
// handle both es imports and cjs
mod: mod.default ? mod.default : mod
})
})
}
render() {
if (!this.state.mod)
return false
return this.props.children(this.state.mod)
}
}
// ...
// bundle模型用来异步加载组件
import Bundle from './bundle.js';
// 引入单个页面(包括嵌套的子页面)
// 同步引入
import Index from './app/index.js';
// 异步引入
import ListContainer from 'bundle-loader?lazy&name=app-[name]!./app/list.js';
const List = () => (
<Bundle load={ListContainer}>
{(List) => <List />}
</Bundle>
)
// ...
<HashRouter>
<Router basename="/">
<div>
<Route exact path="/" component={Index} />
<Route path="/list" component={List} />
</div>
</Router>
</HashRouter>
// ...
webpack.config.js文件配置
output: {
path: path.resolve(__dirname, './output'),
filename: '[name].[chunkhash:8].bundle.js',
chunkFilename: '[name]-[id].[chunkhash:8].bundle.js',
},
output: {
path: path.join(__dirname, '/../dist/assets'),
filename: 'app.js',
publicPath: defaultSettings.publicPath,
// 添加 chunkFilename
chunkFilename: '[name].[chunkhash:5].chunk.js',
},
ReactDOM.render(
(
<Router history={browserHistory}>
{/* 主页 */}
<Route path="/" component={App}>
{/* 默认 */}
<IndexRoute component={HomePage} />
{/* baidu */}
<Route path="/baidu" component={BaiduPage}>
<Route path="result" component={BaiduResultPage} />
<Route path="frequency" component={BaiduFrequencyPage} />
</Route>
{/* 404 */}
<Route path='/404' component={NotFoundPage} />
{/* 其他重定向到 404 */}
<Redirect from='*' to='/404' />
</Route>
</Router>
), document.getElementById('app')
);
ReactDOM.render(
(
<Router history={browserHistory}>
{/* 主页 */}
<Route path="/" component={App}>
{/* 默认 */}
<IndexRoute component={HomePage} />
{/* baidu */}
<Route path="/baidu"
getComponent(nextState, cb)
{ require.ensure([], (require) => { cb(null, require('components/layer/HomePage')) }, 'HomePage')}>
<Route path="result" getComponent... />
<Route path="frequency" getComponent... />
</Route>
{/* 404 */}
<Route path='/404' getComponent... />
{/* 其他重定向到 404 */}
<Redirect path='*' onEnter: (_, replaceState) => replaceState(null, "/404") />
</Route>
</Router>
), document.getElementById('app')
);
require.ensure(dependencies, callback, chunkName)
module.exports = {
path: '*',
onEnter: (_, replaceState) => replaceState(null, "/404")
}
getComponent(nextState, cb) {
require.ensure([], (require) => {
// 在后面加 .default
cb(null, require('components/layer/ReportPage')).default
}, 'ReportPage')
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有