欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React-router中結(jié)合webpack實(shí)現(xiàn)按需加載實(shí)例

 更新時(shí)間:2017年05月25日 10:44:46   作者:小小小小小亮  
本篇文章主要介紹了React-router中結(jié)合webpack實(shí)現(xiàn)按需加載實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

簡(jiǎn)要介紹:在React-router中,暴露了3個(gè)接口,如果結(jié)合webpack的code splitting,就通過切換路由實(shí)現(xiàn)按需加載。

1.webpack的code splitting

webpack可以通過一些方法,來實(shí)現(xiàn)按需加載,暴露的接口為require.ensure

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

這個(gè)require.ensure保證了模塊的異步調(diào)用,當(dāng)callback回調(diào)中調(diào)用了一個(gè)模塊的時(shí)候,可以實(shí)現(xiàn)按需加載。

2.React-router實(shí)現(xiàn)按需加載的接口

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

(1)webpack的配置:

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

在這里我們加上了chunkFilename:…. 這句代碼用于分割js,特別注意publicPath這個(gè)路徑要與服務(wù)器的資源的路徑對(duì)應(yīng),否則加載js的時(shí)候會(huì)出現(xiàn)404錯(cuò)誤。

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

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)最后效果:

首頁(yè)時(shí)候,加載了examine.js和nav.js:

這里寫圖片描述

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

這里寫圖片描述

(4)總結(jié):

我們看到react-router的按需加載,作用主要表現(xiàn)在可以減少首頁(yè)請(qǐng)求的文件的大小。

3.注意事項(xiàng):

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

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

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

特別是第3點(diǎn),筆者就是因?yàn)檫@個(gè)原因?qū)е掳葱杓虞d失敗,特別注意import不能在任何地方引入按需加載的組件。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React中使用TS完成父組件調(diào)用子組件的操作方法

    React中使用TS完成父組件調(diào)用子組件的操作方法

    由于在項(xiàng)目開發(fā)過程中,我們往往時(shí)需要調(diào)用子組件中的方法,這篇文章主要介紹了React中使用TS完成父組件調(diào)用子組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • React路由管理之React Router總結(jié)

    React路由管理之React Router總結(jié)

    React項(xiàng)目通常都有很多的URL需要管理,最常使用的解決方案就是React Router了,本篇文章主要介紹了React路由管理之React Router總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • react dva實(shí)現(xiàn)的代碼

    react dva實(shí)現(xiàn)的代碼

    dva是一個(gè)基于redux和redux-saga的數(shù)據(jù)流方案,然后為了簡(jiǎn)化開發(fā)體驗(yàn),dva額外內(nèi)置了react-router,fetch,可以激烈為一個(gè)輕量級(jí)的應(yīng)用框架,這篇文章主要介紹了react dva實(shí)現(xiàn),需要的朋友可以參考下
    2021-11-11
  • react 組件實(shí)現(xiàn)無縫輪播示例詳解

    react 組件實(shí)現(xiàn)無縫輪播示例詳解

    這篇文章主要為大家介紹了react 組件實(shí)現(xiàn)無縫輪播示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React不能將useMemo設(shè)置為默認(rèn)方法原因詳解

    React不能將useMemo設(shè)置為默認(rèn)方法原因詳解

    這篇文章主要為大家介紹了React不能將useMemo設(shè)置為默認(rèn)方法原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-07-07
  • 詳解React Native 屏幕適配(炒雞簡(jiǎn)單的方法)

    詳解React Native 屏幕適配(炒雞簡(jiǎn)單的方法)

    React Native 可以開發(fā) ios 和 android 的 app,在開發(fā)過程中,勢(shì)必會(huì)遇上屏幕適配,這篇文章主要介紹了詳解React Native 屏幕適配(炒雞簡(jiǎn)單的方法),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • JS中使用react-tooltip插件實(shí)現(xiàn)鼠標(biāo)懸浮顯示框

    JS中使用react-tooltip插件實(shí)現(xiàn)鼠標(biāo)懸浮顯示框

    前段時(shí)間遇到的一個(gè)需求,要求鼠標(biāo)懸停顯示使用描述, 用到了react-tooltip插件,今天寫一個(gè)總結(jié),感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • React?UI組件庫(kù)之快速實(shí)現(xiàn)antd的按需引入和自定義主題

    React?UI組件庫(kù)之快速實(shí)現(xiàn)antd的按需引入和自定義主題

    react入門學(xué)習(xí)告一段路,下面這篇文章主要給大家介紹了關(guān)于React?UI組件庫(kù)之快速實(shí)現(xiàn)antd的按需引入和自定義主題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)

    react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)

    下面小編就為大家?guī)硪黄猺eact.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 解析react?函數(shù)組件輸入卡頓問題?usecallback?react.memo

    解析react?函數(shù)組件輸入卡頓問題?usecallback?react.memo

    useMemo是一個(gè)react hook,我們可以使用它在組件中包裝函數(shù)??梢允褂盟鼇泶_保該函數(shù)中的值僅在依賴項(xiàng)之一發(fā)生變化時(shí)才重新計(jì)算,這篇文章主要介紹了react?函數(shù)組件輸入卡頓問題?usecallback?react.memo,需要的朋友可以參考下
    2022-07-07

最新評(píng)論