NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

React 支持了 ES6 Classes,听听他们怎么说

  • 2015-03-23
  • 本文字数:1372 字

    阅读完需:约 5 分钟

React 是 Facebook 开源的构建反应式用户界面的 JavaScript 库,Facebook 用它构建了 Instagram app 以及 Facebook 自身的一部分功能。

React v0.13 的声明中,Facebook 的开发者 Ben Alpert 介绍了 ES6 classes 的新特性,这些特性可以协助开发者编写更有弹性的组件,与此同时,他们也打算用这些新特性代替React.createClass

Sebastian Markbåge 在 React v0.13.0 Beta 1 的声明中提供了更多有关 ES6 的信息。

Markbåge 说:

JavaScript 原本没有内建的类系统,包括我们在内的每一个流行的框架都构建了自己的类系统。这意味着你需要对每一个框架语法上细微差异都要了如指掌。

我们认为我们的职责并不是设计一个类系统,我们只想使用符合 JavaScript 标准的方式去创造类。

使用 React 0.13.0 意味着你不再需要使用 React.createClass 来创建 React 组件,如果你有一个转译器,那么你现在就可以上手 ES6 classes,你可以使用我们在 react-tools 里提供的转译器,不过你需要启用使用 harmony 的选项:jsx --harmony。

复制代码
class HelloMessage extends React.Component {
render() {
return <div>Hello {this.props.name}</div>;
}
}
React.render(<HelloMessage name="Sebastian" />, mountNode);

虽然 getInitialState 还不尽如人意,但其它大多数的 API 应该可以满足你的期望,我们认为,只使用简单的实例属性是标明一个类的特定状态的惯用手法。同样的,getDefaultProps 和 getDefaultProps 也只是构造器的属性而已。

复制代码
export class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
tick() {
this.setState({count: this.state.count + 1});
}
render() {
return (
<div onClick={this.tick.bind(this)}>
Clicks: {this.state.count}
);
}
}
Counter.propTypes = { initialCount: React.PropTypes.number };
Counter.defaultProps = { initialCount: 0 };

React v0.13 的其它部分也有翻天覆地的变化,包括 React Core、React Tools 和 JSX。

React Core 中的新特性有:新的顶级 API、React.findDOMNode(component) 和 React.cloneElement(el, props)。值得注意的是现在用 React.findDOMNode(component) 代替了 component.getDOMNode(),在未来会启用更多的模式。根据声明的介绍,React.cloneElement 被用以拷贝 React 的元素(elements),这与 React.addons.cloneWithProps 相似,但是它保持 key 和 ref 不变,并且不会自动合并 style 和 className。

对于 React Tools 来说,在 jsx 命令行中新加入了–target 选项,可以允许用户指定 React 所使用的 ECMAScript 的版本。

React 0.13 给 JSX 带来了突破性的改变,以前在一个元素内使用 > 或者}会被识别为一个字符串,由于 JSX 变更了解析的方式,现在会将其视为语法错误。Alpert 指出:“npm 中有一个名为 jsx_orphaned_brackets_transformer 的包,你可以用它来寻找、修复 JSX 代码中潜在的问题”。

React 0.13 现在可以下载了。

查看英文原文: React Introduces Support for ES6 Classes


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-23 05:1113363
用户头像

发布了 63 篇内容, 共 131.8 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

模块五作业

seawolflin

架构训练营

Android开发:新建后缀为txt的文件并且使用的步骤

三掌柜

8月日更 8月

vue入门:vuex概括与使用

小鲍侃java

8月日更

Nginx-基本概念和使用

Rubble

8月日更

四种常见的 POST 提交数据方式

一个大红包

8月日更

IDEA2020.1构建Spring5.2.x源码

4ye

Java spring 源码 后端 8月日更

装饰器模式

wzh

面试 设计模式 装饰器

Vue进阶(五十四):vue-cli 脚手架 dev-server.js 配置文件详解

No Silver Bullet

Vue 8月日更

Java web程序的运行时环境

wzh

Java tomcat 面试 Web JVM

MySQL 系列教程之(十一)Explain 与慢查询优化

若尘

MySQL 数据库 8月日更

手撸二叉树之合并二叉树

HelloWorld杰少

8月日更 数据结构算法

Android.mk

Changing Lin

8月日更

【布道API】权限错误码选择:401、403 或 404

devpoint

HTTP Authorization REST API 8月日更

观察者模式

wzh

面试 设计模式 观察者模式

JVM内存划分

wzh

面试 JVM 方法区

Vue进阶(五十五):vue-cli 脚手架 build.js 配置文件详解

No Silver Bullet

Vue 8月日更

Android EditText输入框实现下拉且保存最近5个历史记录

Andy阿辉

android Android 小菜鸟 编程思想 8月日更

Golang协程之了解管道的缓存能力

Regan Yue

协程 Go 语言 8月日更

为了完成小姐姐安排的打分系统,又熬了一个小时的夜补充视图与模板

梦想橡皮擦

8月日更

使用Redisson优雅关闭订单

码农参上

redission 8月日更

kubernetes/k8s CNI 分析 - 容器网络接口分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cni

JVM GC机制

wzh

面试 JVM 垃圾回收 GC GC Root

Java技术开发专题系列之【Guava Collections】实战使用相关Guava不一般的集合框架

洛神灬殇

Java Guava 8月日更 Guava Collections

Go- 字符串

HelloBug

索引 字符串 Go 语言 拼接 长度

java操作sql server数据库

Python研究者

8月日更

JAVA 规范

gin

类加载机制

wzh

Java 面试 JVM 类加载器 JVM类加载

ShardingSphere源码解析 初步准备

Java 源码 ShardingSphere

@ConditionOnClass的使用

Rubble

8月日更

策略模式

wzh

面试 设计模式 策略模式

回调模式

wzh

面试 设计模式 回调函数

React支持了ES6 Classes,听听他们怎么说_JavaScript_James Chesters_InfoQ精选文章