所有組件的代碼都打包在bundle.js里,加載首頁的時候,把其它頁面的代碼也加載了,影響首頁加載速度。我們希望訪問首頁的時候只加載首頁,訪問詳情頁的時候再去加載詳情頁的代碼。異步組件可以幫我們實現,需要使用第三方依賴“react-loadable”。
安裝
npm install react-loadable --save
使用
一、新建loadable.js
loadable.js:
import React , {Component} from 'react';
import Loadable from 'react-loadable';
const LoadableComponent = Loadable({
//意思是當前目錄下的index組件是異步加載的
loader: () => import('./'),
//加載時臨時顯示的組件
loading:()=>{
return <div>load</div>
}
});
//返回一個無狀態組件LoadableComponent
export default ()=><LoadableComponent/>
二、修改APP.js
引入:
//不再是import Detail from './pages/detail'; import Detail from './pages/detail/loadable';
保存刷新頁面,結果報下圖錯。

這是為什么呢?因為路由"/detail/:id" 對應的組件是loadable.js,而不是之前的index.js,所以在loadable.js里可以獲取到this.props.match.params.id,而index.js里獲取不到。
<Route exact path="/detail/:id" component={Detail} />
有什么解決辦法嗎?
三、修改index.js
需要在index.js里引入react-router-dom的withRouter方法。
import {withRouter} from 'react-router-dom';
使用withRouter(Detail)使Detail有能力獲取到router里到所有參數。
export default connect(mapStateToProps,mapDispatchToProps)(withRouter(Detail));
