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中的其他对象
Jan 16 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
Jun 25 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
微信小程序之购物车功能
Sep 23 Javascript
微信小程序 获取javascript 里的数据
Aug 17 Javascript
Vue精简版风格概述
Jan 30 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
Sep 04 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 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
PHP date函数参数详解
2006/11/27 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
python多线程并发及测试框架案例
2019/10/15 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
Python对excel的基本操作方法
2021/02/18 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
软件测试常见笔试题
2012/02/04 面试题
商业活动邀请函
2014/02/04 职场文书
捐赠仪式主持词
2014/03/19 职场文书
《火烧云》教学反思
2014/04/12 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
学校师德师风整改措施
2014/10/27 职场文书
TypeScript 内置高级类型编程示例
2022/09/23 Javascript