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 实现??打印?理
Apr 28 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
Javascript根据指定下标或对象删除数组元素
Dec 21 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
使用jquery.qrcode生成彩色二维码实例
Aug 08 Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 Javascript
基于Vue+Webpack拆分路由文件实现管理
Nov 16 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编写PDF文档生成器
2006/10/09 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
2019/08/03 PHP
Dom 结点创建 基础知识
2011/10/01 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python中的yield使用方法
2014/02/11 Python
python中函数传参详解
2016/07/03 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
实例介绍Python中整型
2019/02/11 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
《孔繁森》教学反思
2014/04/17 职场文书
化学专业自荐信
2014/05/28 职场文书
门店业绩提升方案
2014/06/08 职场文书
毕业生应聘求职信
2014/07/10 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python