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 相关文章推荐
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 Javascript
js实现class样式的修改、添加及删除的方法
Jan 20 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
Feb 23 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
JS中常用的消息框总结
Feb 24 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 Javascript
vue中用 async/await 来处理异步操作
Jul 18 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语法(2)
2006/10/09 PHP
php 显示指定路径下的图片
2009/10/29 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
php实现websocket实时消息推送
2018/03/30 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
浅谈JavaScript之事件绑定
2013/07/08 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
简化Python的Django框架代码的一些示例
2015/04/20 Python
python定时执行指定函数的方法
2015/05/27 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
py-charm延长试用期限实例
2019/12/22 Python
python基于event实现线程间通信控制
2020/01/13 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
商场消防演习方案
2014/02/12 职场文书
小学生操行评语
2014/04/22 职场文书
团日活动总结范文
2014/04/25 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
学习保证书怎么写
2015/02/26 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
golang 实现两个结构体复制字段
2021/04/28 Golang
python数字图像处理之图像的批量处理
2022/06/28 Python