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 遍历对象中的子对象
Jul 03 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
Aug 16 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
微信小程序微信支付接入开发实例详解
Apr 12 Javascript
ionic3 懒加载
Aug 16 Javascript
js闭包学习心得总结
Apr 17 Javascript
详解基于vue-cli3快速发布一个fullpage组件
Mar 08 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
Vue 的双向绑定原理与用法揭秘
May 06 Javascript
vue中用 async/await 来处理异步操作
Jul 18 Javascript
解决vue-cli输入命令vue ui没效果的问题
Nov 17 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中的string类型使用说明
2010/07/27 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
php面向对象重点知识分享
2019/09/27 PHP
JavaScript的Function详细
2006/11/14 Javascript
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
python数据结构之二叉树的建立实例
2014/04/29 Python
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python机器学习库常用汇总
2017/11/15 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
2014年班组工作总结
2014/11/20 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android