react开发中如何使用require.ensure加载es6风格的组件


Posted in Javascript onMay 09, 2017

其实用的babel,在浏览器端就应该可以加载,之前少了个default:

require.ensure([],(require) => {
     let A = require('./a.js').default;
})

以下方式也可以,但是比较low,可以作废了:

1、问题提出:想通过require.ensure加载es6风格的模块?

2、出现问题:import方式本身就是静态设计方式。如果require进来的是commonjs模块或者amd则没问题,但项目只想es6一个书写风格,行吗?

遗憾的是:一般语言编译工具(如babel),不支持直接require一个es6风格的React组件。

怎么办??

3、react代码分割方式:

react代码分割常见使用router方式,但是单页面应用,不打算router下,可以用require.ensure进行按需加载

react的api在此:https://webpack.github.io/docs/code-splitting.html

文档中并没有实例,而且现阶段,大部分程序已经完全按照es6风格的代码。

那么怎样让es6模块也能通过require呢?

先看结论:在es6方式书写的模块底部增加一句module.exports=yourclassName

例如:module.exports = Hello;

4、代码举例:

1)Container模块如下:

import React, {Component} from 'react';
export default class Container extends Component {
  constructor() {
    super();
    this.state = {
      currentComponent: null
    }
  }

  doSomething = () => {
    require.ensure(['./app2'], (require) => {
      const Comp = require('./app2');
      this.setState({
        currentComponent: <Comp/>
      })
    })
  };

  render() {
    return (
      <div>
        <span onClick={this.doSomething} style={{border: "1px solid #000"}}>点击后,按需加载如下模块</span>
        {this.state.currentComponent}
      </div>
    )
  }
}

2)app2模块如下

注意:在es6方式写的模块的最底下增加一句:module.exports = Hello;即可

或者app2直接按照commonjs规范或者是amd、cmd规范书写也成。

import React from 'react'
export default class Hello extends React.Component {
  render(){
    return (
      <div>Hello</div>
    )
  }
}
//warning:这一句必须加上,因为在require.ensure中使用了require引入模块
module.exports = Hello;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JTrackBar水平拖动效果
Jul 15 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 Javascript
jquery实现图片切换代码
Oct 13 Javascript
深入理解JavaScript 参数按值传递
May 24 Javascript
jquery.param()实现数组或对象的序列化方法
Oct 08 jQuery
Vue使用NProgress进度条的方法
Sep 21 Javascript
微信小程序跨页面传递data数据方法解析
Dec 13 Javascript
VUE动态生成word的实现
Jul 26 Javascript
Vue2单一事件管理组件通信
May 09 #Javascript
react-router实现按需加载
May 09 #Javascript
BootStrap表单时间选择器详解
May 09 #Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 #Javascript
JS触摸与手势事件详解
May 09 #Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
May 09 #Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 #Javascript
You might like
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php中的ini配置原理详解
2014/10/14 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP加密解密类实例代码
2016/07/20 PHP
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
cookie的secure属性详解
2015/04/08 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
python查询mysql,返回json的实例
2018/03/26 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python装饰器语法糖
2019/01/02 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
斯福泰克软件测试面试题
2015/02/16 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
成人毕业生自我鉴定
2013/10/18 职场文书
政法大学毕业生自荐信范文
2014/01/01 职场文书
消防工作实施方案
2014/06/09 职场文书
财务工作个人总结
2015/02/27 职场文书
入党积极分子考察意见
2015/06/02 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
MySQL基础(二)
2021/04/05 MySQL