ES5与ES6对比

1. 模块引用

1.在ES5里,引入React包基本通过require进行,代码类似这样:

// ES5
var React = require('react');
var { Component, PropTypes } = React;
console.log(Component);

在ES6里,import写法更为标准.

// ES6
import React, { Component, PropTypes } from 'react';
console.log(Component);

2. 导出单个类

// 在ES5里面,要导出一个类别的模块用,一般通过module.exports来导出。
var React = require('react');
var MyComponents = React.createClass({
render: function() {
return (<div>1111</div>)
}
});
module.exports = MyComponents; // 引用如下:
var c1 = require('./MyComponents'); // 在ES6里面 通过export default来导出类
// es6
export default class MyComponent extends Component {
render() { }
}
// 引用如下:
import MyComponent from './MyComponent';

3. 定义组件

// ES5里面, 通过React.createClass来定义一个组件类
// es5
var React = require('react');
var C1 = React.createClass({
render: function() {
return (
<C2 url='' />
)
}
}); // 在ES6里,通过定义一个继承自React.Component的class来定义一个组件类,像这样:
var React = require('react');
class C1 extends React.Component {
render() {
return (
<C2 url={ this.props.url }/>
)
}
}

4. 给组件定义方法

// ES5的写法
var React = require('react');
var C1 = React.createClass({
componentWillMount: function() { },
render: function() {
return (
<C2 url={ this.props.url } />
)
}
})
// ES6
var React = require('react');
class C1 extends React.Component {
componentWillMount() { }
render() {
return (
<div>222</div>
)
}
}

5. 定义组件的属性类型 和 默认属性

// 在ES5里,属性类型和默认属性分别通过propTypes成员和getDefaultProps方法来实现
var React = require('react');
var A = React.createClass({
getDefaultProps: function() {
return {
a: false,
b: 10,
};
},
propTypes: {
a: React.PropTypes.bool.isRequired,
b: React.PropTypes.number.isRequired,
c: React.PropTypes.string.isRequired,
d: React.PropTypes.string.isRequired,
},
render: function() {
return (
<C />
);
}
});
// 在ES6里,可以统一使用static成员来实现
var React = require('react');
//ES6
class A extends React.Component {
static defaultProps = {
a: false,
b: 10,
};
static propTypes = {
a: React.PropTypes.bool.isRequired,
b: React.PropTypes.number.isRequired,
c: React.PropTypes.string.isRequired,
d: React.PropTypes.string.isRequired,
};
// 注意这里有分号
render() {
return (
<C />
);
} // 注意这里既没有分号也没有逗号
}

6. 初始化STATE

//ES5
var React = require('react');
var A = React.createClass({
getInitialState: function() {
return {
loopsRemaining: this.props.maxLoops,
};
}
})
//ES6
var React = require('react');
class A extends React.Component {
constructor(props){
super(props);
this.state = {
loopsRemaining: this.props.maxLoops,
};
}
}

7. 把方法作为回调提供

//ES5
var React = require('react');
var A = React.createClass({
handleOptionsButtonClick: function(e) {
this.setState({showOptionsModal: true});
},
render: function(){
return (
<TouchableHighlight onClick={this.handleOptionsButtonClick}>
<Text>{this.props.label}</Text>
</TouchableHighlight>
)
}
}); // 在ES6下,你需要通过bind来绑定this引用,或者使用箭头函数(它会绑定当前scope的this引用)来调用
//ES6 var React = require('react');
class PostInfo extends React.Component{
handleOptionsButtonClick(e){
this.setState({showOptionsModal: true});
}
render(){
return (
<TouchableHighlight
onPress={this.handleOptionsButtonClick.bind(this)}
onPress={e=>this.handleOptionsButtonClick(e)}
>
<Text>{this.props.label}</Text>
</TouchableHighlight>
)
}
}

ES5与ES6对比的更多相关文章

  1. React入门 (1)—使用指南(包括ES5和ES6对比)

    前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...

  2. 多角度对比 ES5与ES6的区别

    ES5与ES6的对比不同点整理 本文关键词:ES6,javascript, 1.Default Parameters(默认参数) es6之前,定义默认参数的方法是在一个方法内部定义 var link ...

  3. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)

    写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...

  4. JavaScript、ES5和ES6的介绍和区别

    JavaScript由三部分组成: ECMAScript(核心) DOM(文档对象模型) BOM (浏览器对象模型) ES5(ECMAScript第五个版本) strict模式 严格模式,限制一些用法 ...

  5. 创建对象—从es5到es6

    原文地址 本文主要讲述了使用JavaScript创建对象的几种方式,分别是传统的Object构造函数.对象字面量.工厂模式.构造函数模式.原型模式.组合模式,以及es6的class定义类.然后从bab ...

  6. ES5和ES6中对于继承的实现方法

    在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...

  7. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  8. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...

  9. ES5和ES6那些你必须知道的事儿(三)

    ES5和ES6那些你必须知道的事儿 ES6新增的东西 一.块级作用域:关键字let,常量const let与var的区别: a.不会进行变量声明提升 b.变量不允许被重复定义 c.变量不允许被删除 d ...

随机推荐

  1. 【Spring】25、Spring代理。 BeanNameAutoProxyCreator 与 ProxyFactoryBean

    一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的 ...

  2. 前端面试整理——javascript算法和测试题

    (1)算法: 1.斐波那契数列:1.1.2.3.5.8.13.21.输入n,输出数列中第n位数的值. 方案一: function fn(n){ var num1 = 1, num2= 1, num3 ...

  3. Java并发编程(十三)线程间协作的两种方式:wait、notify、notifyAll和Condition

    在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果 ...

  4. maven管理项目的特点

    Maven介绍 我们在开发项目的过程中,会使用一些开源框架.第三方的工具等等,这些都是以jar包的方式被项目所引用,并且有些jar包还会依赖其他的jar包,我们同样需要添加到项目中,所有这些相关的ja ...

  5. (转载)Oracle 树操作(select…start with…connect by…prior)

    转载地址:https://www.cnblogs.com/linjiqin/p/3152674.html 备注:如有侵权,请立即联系删除. oracle树查询的最重要的就是select…start w ...

  6. 【HANA系列】SAP HANA XS的JavaScript API详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS的Java ...

  7. centos7下安装指定版本mysql5.7.23

    现在mysql版本已经到MySQL 8.0(GA)稳定版本了,所以需求是想简单又快速在centos7下安装指定版本例如MySQL 5.7(GA)版本有下面这种方法 首先需要到mysql官网这里下载对应 ...

  8. 彻底卸载删除Win10易升,禁止再生

    易升是微软推出的win10升级工具.用户可通过易升一键升级win10. 因为我的电脑已经是win10的系统,所以我也不需要升级.也不想升级,因为我从网上了解到升级后的系统反而没有升级前的好用. 微软的 ...

  9. fedora添加ntfs文件系统支持

    ntfs支持(安装后不能打开,重启) 如果没有换源先看一下换源. 查找库中是否有ntfs-3g. [root@bogon zhujikuan]# yum search ntfs 上次元数据过期检查:0 ...

  10. 三种方法更改MAC OS X下的HOSTS文件

    1.终端更改 用程序里面打开终端(terminal),输入 sudo vi /etc/hosts 然后提示输入系统密码 hosts文件就自动打开了 接着输入 i 进入编辑模式 将添加的网站,ip拷贝进 ...