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 相关文章推荐
javascript下高性能字符串连接StringBuffer类
Aug 16 Javascript
JavaScript内核之基本概念
Oct 21 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
Sep 26 Javascript
js简单时间比较的方法
Aug 02 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 Javascript
jQuery常见面试题之DOM操作详析
Jul 05 jQuery
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
jQuery实现评论模块
Aug 19 jQuery
用vue写一个日历
Nov 02 Javascript
关于React Native 无法链接模拟器的问题
Jun 21 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP实现的简单缓存类
2015/07/29 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Python中表示字符串的三种方法
2017/09/06 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python实现C4.5决策树算法
2018/08/29 Python
python中Lambda表达式详解
2019/11/20 Python
Python yield的用法实例分析
2020/03/06 Python
python语言是免费还是收费的?
2020/06/15 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
编程用JAVA解析XML的方式
2013/07/07 面试题
给导游的表扬信
2014/01/10 职场文书
聚美优品广告词改编
2014/03/14 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
2015元旦标语横幅
2014/12/09 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫