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 相关文章推荐
让IE6支持min-width和max-width的方法
Jun 25 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
gulp解决跨域的配置文件问题
Jun 08 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
js判断输入框不能为空格或null值的实现方法
Mar 02 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 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
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
React快速入门教程
2017/01/17 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python中关于使用模块的基础知识
2015/05/24 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python基于百度云文字识别API
2018/12/13 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
个人充满哲理的自我评价
2014/02/20 职场文书
可口可乐广告词
2014/03/20 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
催款律师函范文
2015/05/27 职场文书
入学证明
2015/06/23 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书