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 相关文章推荐
jquery trim() 功能源代码
Feb 14 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
javascript滚轮控制模拟滚动条
Oct 19 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
利用angular.copy取消变量的双向绑定与解析
Nov 25 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
Apr 10 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 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输出Excel文件类
2010/02/08 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
js类 from qq
2006/11/13 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
深入理解Promise.all
2018/08/08 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
幼教个人求职信范文
2013/12/02 职场文书
员工安全承诺书
2014/05/22 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
改进工作作风心得体会
2016/01/23 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server