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 相关文章推荐
日期函数扩展类Ver0.1.1
Sep 07 Javascript
Web开发之JavaScript
Mar 29 Javascript
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
AngularJS语法详解
Jan 23 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
Mar 11 Javascript
详细解密jsonp跨域请求
Apr 15 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
jquery实现动静态条形统计图
Aug 17 Javascript
JS+CSS实现闪烁字体效果代码
Apr 05 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
微信小程序实现左滑删除效果
Nov 18 Javascript
避坑之 JavaScript 中的toFixed()和正则表达式
Apr 19 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 isset()与empty()的使用区别详解
2010/08/29 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
JS中Location使用详解
2015/05/12 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
python2.7到3.x迁移指南
2018/02/01 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Python configparser模块操作代码实例
2020/06/08 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
女性时尚在线:IVRose
2019/02/23 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
护理专业学生的求职信范文
2013/12/11 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
防暑降温通知书
2015/04/27 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server