您好,登錄后才能下訂單哦!
小編給大家分享一下react-router4配合webpack require.ensure怎么實現異步加載,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
實現異步加載的方法,歸根結底大都是根據webpack的require.ensure來實現
第一個是自己使用require.ensure實現,
第二種 使用loader實現
今天我們說的是使用bundle-loader來實現,這樣代碼更優雅些。
首先需要安裝bundle-loader ,具體使用npm還是yarn,就看你的包管理使用的是啥了。
下面需要一個bundle.js
import React, { Component } from 'react'; export default class Bundle extends Component { constructor(props) { super(props); this.state = { 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({ mod: mod.default ? mod.default : mod }); }); } render() { return this.state.mod ? this.props.children(this.state.mod) : null; } }
然后把bundle.js 引進來,同時也把需要做異步的文件引進來,但是前面需要添加
bundle-loader?lazy&name=[name]!
比如:
import Bundle from './components/bundle.js'; import ListComponent from 'bundle-loader?lazy&name=[name]!./file/List.jsx';
下面就是添加路由這塊的配置:
<Route path="/list" component={List} />
以及配置output的chunkFilename
chunkFilename: '[name]-[id].[chunkhash:4].bundle.js'
chunkFilename配置好以后,異步加載進來的文件名稱就會按照上面的命名方式來展示,如果不配置,就是webpack給生成的數字了。
上面的都配置好了以后,就是怎么使用bundle了,你看到route上配置的component對應的是List,所以我們需要寫一個List:
const List = (props) => ( <Bundle load={ListComponent}> {(List) => <List {...props}/>} </Bundle> );
看完了這篇文章,相信你對“react-router4配合webpack require.ensure怎么實現異步加載”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。