国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

React-router中結合webpack實現按需加載實例

2019-11-19 16:29:34
字體:
來源:轉載
供稿:網友

簡要介紹:在React-router中,暴露了3個接口,如果結合webpack的code splitting,就通過切換路由實現按需加載。

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:

這里寫圖片描述

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

這里寫圖片描述

(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不能在任何地方引入按需加載的組件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 星座| 白水县| 南平市| 图们市| 新宁县| 永兴县| 叙永县| 海宁市| 留坝县| 房山区| 宣威市| 庆阳市| 四平市| 五河县| 皋兰县| 玛纳斯县| 龙游县| 册亨县| 陇西县| 新泰市| 广东省| 富平县| 上高县| 普格县| 淮滨县| 房产| 上高县| 玉林市| 东平县| 微山县| 敦煌市| 伊金霍洛旗| 蓬莱市| 从江县| 东方市| 南陵县| 顺昌县| 鞍山市| 比如县| 万载县| 额敏县|