1、asyncComponent函数(惊天函数):函数很好了解,loadComponent参数示意须要代码切割的门路,函数返回值是一个react组件,组件外部帮你做好了then()办法的操作。
import React from 'react'export const asyncComponent = loadComponent => ( class AsyncComponent extends React.Component { state = { Component: null, } componentWillMount() { if (this.hasLoadedComponent()) { return; } loadComponent() .then(module => module.default) .then((Component) => { this.setState({ Component }); }) .catch((err) => { console.error(`Cannot load component in <AsyncComponent />`); throw err; }); } hasLoadedComponent() { return this.state.Component !== null; } render() { const { Component } = this.state; return (Component) ? <Component {...this.props} /> : null; } });
2、在react中应用
import { asyncComponent } from './AsyncComponent'const Foo = asyncComponent(() => import(/* webpackChunkName: "foo" */ "./foo"))<Route path="/xx" component={Foo} />
3、好了,这样你就胜利了,然而,请留神上面几个问题:
webpack2的配置文件中,须要配置chunkName。
chunkFilename: '[name].js'
如果你的异步加载组件有导入款式,请把款式移植到全局js文件导入。