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 常见操作实现方式和常用函数方法总结
May 06 Javascript
JavaScript包装对象使用介绍
Aug 29 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
JavaScript实现鼠标点击后层展开效果的方法
May 13 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
VUE实现表单元素双向绑定(总结)
Aug 08 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
JS实现自定义弹窗功能
Aug 08 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
微信小程序实现音乐播放页面布局
Dec 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 数组和字符串互相转换实现方法
2013/03/26 PHP
php中的登陆login实例代码
2016/06/20 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
python实现中文分词FMM算法实例
2015/07/10 Python
Python表示矩阵的方法分析
2017/05/26 Python
python生成ppt的方法
2018/06/07 Python
python中map的基本用法示例
2018/09/10 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python爬虫超时的处理的实例
2018/12/19 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
本科生详细的自我评价
2013/09/19 职场文书
导购员的岗位职责
2014/02/08 职场文书
《掌声》教学反思
2014/02/23 职场文书
新春联欢会主持词
2014/03/24 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
党员转正申请报告
2015/05/15 职场文书
指导教师推荐意见
2015/06/05 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis