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 学习笔记一些小技巧
Mar 28 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
js实现的四级左侧网站分类菜单实例
May 06 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
Node.js与MySQL交互操作及其注意事项
Oct 05 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
0基础学习前端开发的一些建议
Jul 14 Javascript
ES6中的Javascript解构的实现
Oct 30 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
前端必学之PHP语法基础
2016/01/01 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python中apply函数的用法实例教程
2014/07/31 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
《沉香救母》教学反思
2014/04/19 职场文书
乳制品整治工作方案
2014/05/29 职场文书
群众路线领导对照材料
2014/08/23 职场文书
单位员工收入证明样本
2014/10/09 职场文书
党员先进事迹材料
2014/12/19 职场文书
行政复议决定书
2015/06/24 职场文书
2019大学生实习报告
2019/06/21 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android