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 相关文章推荐
iis6+javascript Add an Extension File
Jun 13 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
May 23 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
Sep 08 Javascript
Bootstrap实现input控件失去焦点时验证
Aug 04 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
Element input树型下拉框的实现代码
Dec 21 Javascript
微信小程序实现音乐播放器
Nov 20 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 13 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程序的国际化实现方法(利用gettext)
2011/08/14 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
js实现select下拉框选择
2020/01/11 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python的设计模式编程入门指南
2015/04/02 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
python中使用序列的方法
2015/08/03 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Python语言异常处理测试过程解析
2020/01/08 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
班组长安全生产职责
2013/12/16 职场文书
中介业务员岗位职责
2014/04/09 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
2014年科技工作总结
2014/11/26 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
创业计划书之农家乐
2019/10/09 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python