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代码
Aug 13 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
解析window.open的使用方法总结
Jun 19 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
Jan 21 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
Jul 20 Javascript
js表单序列化判断空值的实例
Sep 22 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
微信小程序开发的基本流程步骤
Jan 31 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
JavaScript 事件捕获冒泡与捕获详情
Nov 11 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
ThinkPHP登录功能的实现方法
2014/08/20 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
原生JS实现图片翻书效果
2017/02/16 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Python切片用法实例教程
2014/09/08 Python
python简单分割文件的方法
2015/07/30 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
高中生学习生活的自我评价
2013/11/27 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
区域销售经理职责
2013/12/22 职场文书
党校学习自我鉴定
2014/02/24 职场文书
公司请假条格式
2014/04/11 职场文书
家长建议怎么写
2014/05/15 职场文书
励志演讲稿200字
2014/08/21 职场文书
学习退步检讨书
2014/09/28 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
Python合并多张图片成PDF
2021/06/09 Python