react-router4 配合webpack require.ensure 实现异步加载的示例


Posted in Javascript onJanuary 18, 2018

实现异步加载的方法,归根结底大都是根据webpack的require.ensure来实现

第一个是自己使用require.ensure实现,

第二种 使用loader实现

今天我们说的是使用bundle-loader来实现,这样代码更优雅些。

首先需要安装bundle-loader ,具体使用npm还是yarn,就看你的包管理使用的是啥了。

下面需要一个bundle.js

import React, { Component } from 'react';
export default class Bundle extends Component {
  constructor(props) {
    super(props);
    this.state = {
      mod: null
    };
  }

  componentWillMount() {
    this.load(this.props);
  }

  componentWillReceiveProps(nextProps) {
    if (nextProps.load !== this.props.load) {
      this.load(nextProps);
    }
  }

  load(props) {
    this.setState({
      mod: null
    });
    props.load(mod => {
      this.setState({
        mod: mod.default ? mod.default : mod
      });
    });
  }

  render() {
    return this.state.mod ? this.props.children(this.state.mod) : null;
  }
}

然后把bundle.js 引进来,同时也把需要做异步的文件引进来,但是前面需要添加

bundle-loader?lazy&name=[name]!

比如:

import Bundle from './components/bundle.js';
import ListComponent from 'bundle-loader?lazy&name=[name]!./file/List.jsx';

下面就是添加路由这块的配置:

<Route path="/list" component={List} />

以及配置output的chunkFilename

chunkFilename: '[name]-[id].[chunkhash:4].bundle.js'

chunkFilename配置好以后,异步加载进来的文件名称就会按照上面的命名方式来展示,如果不配置,就是webpack给生成的数字了。

上面的都配置好了以后,就是怎么使用bundle了,你看到route上配置的component对应的是List,所以我们需要写一个List:

const List = (props) => (
  <Bundle load={ListComponent}>
    {(List) => <List {...props}/>}
  </Bundle>
);

到这里基本上就配置完了,这个时候你本地重启服务,然后点击对应的路由,就会看到异步记载的js:List-0.094e.bundle.js

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
Feb 02 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
JavaScript中getUTCSeconds()方法的使用详解
Jun 11 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
Aug 13 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
分享ES6的7个实用技巧
Jan 18 #Javascript
vue 动态修改a标签的样式的方法
Jan 18 #Javascript
详解vue-meta如何让你更优雅的管理头部标签
Jan 18 #Javascript
Nuxt.js踩坑总结分享
Jan 18 #Javascript
Nuxt.js实战详解
Jan 18 #Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 #Javascript
ajax请求data遇到的问题分析
Jan 18 #Javascript
You might like
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Python 自动刷博客浏览量实例代码
2017/06/14 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
社会保险接收函
2014/01/12 职场文书
聚美优品励志广告词
2014/03/14 职场文书
广告学专业求职信
2014/06/19 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
毕业论文致谢词
2015/05/14 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电