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 相关文章推荐
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 Javascript
js获取视频时长代码
Apr 10 Javascript
jQuery表单验证功能实例
Aug 28 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
Node.js动手撸一个静态资源服务器的方法
Mar 09 Javascript
详解如何运行vue项目
Apr 15 Javascript
教你一步步实现一个简易promise
Nov 02 Javascript
使用Cargo工具高效创建Rust项目
Aug 14 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实现的MySQL数据浏览器
2007/03/11 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
pandas中去除指定字符的实例
2018/05/18 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
python3使用GUI统计代码量
2019/09/18 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
25岁生日感言
2014/01/13 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
德能勤绩工作总结
2015/08/11 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python