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 相关文章推荐
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
一看就懂:jsonp详解
Jun 01 Javascript
JavaScript计算某一天是星期几的方法
Aug 05 Javascript
JavaScript中的继承之类继承
May 01 Javascript
关于网页中的无缝滚动的js代码
Jun 09 Javascript
详解JavaScript中数组的reduce方法
Dec 02 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
详解vue模拟加载更多功能(数据追加)
Jun 23 Javascript
JS原生带小白点轮播图实例讲解
Jul 22 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
详解Vue2 添加对scss的支持
Jan 02 Javascript
微信小程序实现弹出菜单动画
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转成EXE文件
2006/10/09 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
jquery插件之easing使用
2010/08/19 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
对于Python的框架中一些会话程序的管理
2015/04/20 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
wxPython实现文本框基础组件
2019/11/18 Python
详解Python中namedtuple的使用
2020/04/27 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
数控专业个人求职信范文
2014/02/05 职场文书
大学生党员自我批评
2014/02/14 职场文书
教师见习期自我鉴定
2014/04/28 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
JavaScript流程控制(分支)
2021/12/06 Javascript