简要介绍:在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不能在任何地方引入按需加载的组件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# webpack
# react
# router
# router按需加载
# webpack按需加载react
# Vue.js中用webpack合并打包多个组件并实现按需加载
# 详解vue项目优化之按需加载组件-使用webpack require.ensure
# 浅谈vue项目优化之页面的按需加载(vue+webpack)
# vue按需加载组件webpack require.ensure的方法
# webpack学习笔记之代码分割和按需加载的实例详解
# Webpack按需加载打包chunk命名的方法
# 加载
# 按需
# 首页
# 渐进式
# 在这里
# 成了
# 就能
# 上了
# 可以通过
# 只需要
# 只在
# 可以实现
# 本页面
# 所需要
# 来实现
# 这句
# 多加
# 回调
# 大家多多
# 可以减少
相关文章:
如何用PHP快速搭建CMS系统?
宝塔新建站点报错如何解决?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
javascript基本数据类型及类型检测常用方法小结
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在景安云服务器上绑定域名并配置虚拟主机?
c++ stringstream用法详解_c++字符串与数字转换利器
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
高端建站三要素:定制模板、企业官网与响应式设计优化
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
python的本地网站制作,如何创建本地站点?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
专业公司网站制作公司,用什么语言做企业网站比较好?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
如何在自有机房高效搭建专业网站?
如何在IIS中新建站点并解决端口绑定冲突?
大连 网站制作,大连天途有线官网?
音乐网站服务器如何优化API响应速度?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何快速登录WAP自助建站平台?
,想在网上投简历,哪几个网站比较好?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
c++怎么用jemalloc c++替换默认内存分配器【性能】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
制作表格网站有哪些,线上表格怎么弄?
网站制作员失业,怎样查看自己网站的注册者?
如何在阿里云通过域名搭建网站?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
linux top下的 minerd 木马清除方法
香港服务器网站卡顿?如何解决网络延迟与负载问题?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在阿里云高效完成企业建站全流程?
,网页ppt怎么弄成自己的ppt?
如何基于云服务器快速搭建网站及云盘系统?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何选择香港主机高效搭建外贸独立站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
,制作一个手机app网站要多少钱?
如何用腾讯建站主机快速创建免费网站?
红河网站制作公司,红河事业单位身份证如何上传?
如何在云指建站中生成FTP站点?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
浅析上传头像示例及其注意事项
*请认真填写需求信息,我们会在24小时内与您取得联系。