React-router中結合webpack實現按需加載的示例分析-創新互聯

這篇文章主要為大家展示了“React-router中結合webpack實現按需加載的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“React-router中結合webpack實現按需加載的示例分析”這篇文章吧。

創新互聯是一家專業提供文安企業網站建設,專注與成都網站設計、做網站、H5場景定制、小程序制作等業務。10年已為文安眾多企業、政府機構等服務。創新互聯專業網站制作公司優惠進行中。

1.webpack的code splitting

webpack可以通過一些方法,來實現按需加載,暴露的接口為require.ensure

require.ensure(["module-a", "module-b"], function() {
 var a = require("module-a");
 // ...
});

這個require.ensure保證了模塊的異步調用,當callback回調中調用了一個模塊的時候,可以實現按需加載。

2.React-router實現按需加載的接口

React-router定義了 getChildRoutes, getIndexRoute, getComponents這樣3個方法,這3個方法是異步的,并且只在需要的時候調用,通過這3個方法定義的路由,我們稱之為“漸進式路由匹配”,React-router在匹配到路由時,只是漸進式的加載改路由所需要的組件,這樣就能實現按需加載。

(1)webpack的配置:

 output: {
    path: __dirname + '/dist/js/',
    publicPath:'/js/',
    filename: '[name].js',
    chunkFilename: '[name].[chunkhash:5].chunk.js'
  },

在這里我們加上了chunkFilename:…. 這句代碼用于分割js,特別注意publicPath這個路徑要與服務器的資源的路徑對應,否則加載js的時候會出現404錯誤。

(2)通過getComponents等3個方法重新配置路由

export const routes={
 path:'/',
 getComponent(nextState,callback){
  require.ensure([],require=>{
   callback(null,require('../components/nav').default);
  },'nav');
 },
 indexRoute:{
  getComponent(nextState,callback){
   require.ensure([],require=>{
    callback(null,require('../components/examine').default);
   },'examine');
  }
 },
 childRoutes:[{
  path:'examine',
  getComponent(nextState,callback){
   require.ensure([],require=>{
    callback(null,require('../components/examine').default);
   },'examine');
   }
 },
 {
  path:'admin',
  getComponent(nextState,callback){
   require.ensure([],require=>{
    callback(null,require('../components/admin').default);
   },'admin');
  }
 },
 {
  path:'history',
  getComponent(nextState,callback){
   require.ensure([],require=>{
    callback(null,require('../components/history').default);
   },'history');
  }
 },
 {
  path:'feedback',
  getComponent(nextState,callback){
   require.ensure([],require=>{
    callback(null,require('../components/feedback').default);
   },'feedback')
  }
 }
]
};

這里我們將路由定義中的component替換成了 getComponent。

(3)最后效果:

首頁時候,加載了examine.js和nav.js:

React-router中結合webpack實現按需加載的示例分析

切換路由時,比如從首頁切換到了商品管理,這樣除了加載examine.js外,多加載了admin.js:

React-router中結合webpack實現按需加載的示例分析

(4)總結:

我們看到react-router的按需加載,作用主要表現在可以減少首頁請求的文件的大小。

3.注意事項:

1、require(‘components/Index').default中require方法的參數不能使用變量,只能使用字符串!

2、如果你的組件是使用es5的module.exports導出的話,那么只需要require(‘components/Index')即可。而如果你的組件是使用es6的export default導出的話,那么需要加上default!例如:require(‘components/Index').default

3、如果在路由頁面使用了按需加載(require.ensure)加載路由級組件的方式,那么在其他地方(包括本頁面)就不要再import了,否則不會打包生成chunk文件。簡而言之,需要按需加載的路由級組件必須在路由頁面進行加載。

特別是第3點,筆者就是因為這個原因導致按需加載失敗,特別注意import不能在任何地方引入按需加載的組件。

以上是“React-router中結合webpack實現按需加載的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯網站建設公司行業資訊頻道!

另外有需要云服務器可以了解下創新互聯建站m.kartarina.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前題目:React-router中結合webpack實現按需加載的示例分析-創新互聯
本文鏈接:http://m.kartarina.com/article26/ccgjcg.html

成都網站建設公司_創新互聯,為您提供面包屑導航網站收錄、定制開發網站排名、Google網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 亚洲色av性色在线观无码| 亚洲精品一级无码鲁丝片| 欧美性生交xxxxx无码影院∵| 亚洲精品无码av片| 精品一区二区无码AV | 久久无码一区二区三区少妇| 野花在线无码视频在线播放| 少妇爆乳无码专区| 久久老子午夜精品无码怎么打| 麻豆精品无码国产在线果冻 | 久久久久久亚洲av成人无码国产| 最新亚洲春色Av无码专区| 免费无码又爽又刺激一高潮| 熟妇人妻无码中文字幕老熟妇| 亚洲真人无码永久在线| 国模无码视频一区| 亚洲av无码一区二区三区天堂 | WWW久久无码天堂MV| 无码国产精品一区二区免费vr| 国产成人无码精品久久久久免费| 免费无码又黄又爽又刺激| 日韩人妻无码精品久久久不卡| 亚洲精品中文字幕无码蜜桃| 亚洲一级Av无码毛片久久精品| 亚洲Av永久无码精品一区二区| 亚洲国产日产无码精品| 无码一区二区三区老色鬼| 夜夜添无码试看一区二区三区| 国产啪亚洲国产精品无码| 久久久无码精品人妻一区| 亚洲成av人无码亚洲成av人| 亚洲天堂2017无码中文| 最新中文字幕av无码专区| 无码不卡av东京热毛片| 无码人妻啪啪一区二区| 亚洲AV无码专区亚洲AV桃| 无码人妻丰满熟妇区五十路| 亚洲AV无码专区亚洲AV桃| 亚洲av无码av在线播放| 国产精品无码MV在线观看| (无码视频)在线观看|