写点什么

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:1113514
用户头像

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

关注

评论

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

dubbo-go 中如何实现路由策略功能

joe

Apache 开源 微服务 dubbo Go 语言

关于HSTS - 强制浏览器使用HTTPS与服务器创建连接

遇见

https 安全 浏览器 TLS 证书

我敢说 80% 的程序员都掉进了「老鼠赛跑」的陷阱

非著名程序员

读书笔记 程序员 程序人生 提升认知

终极 Shell

池建强

Linux Shell

有关Kotlin Companion 我们需要了解到的几个知识点

王泰

Java 编程 kotlin 编程语言

常用手机软件清单

彭宏豪95

效率工具 App 手机 移动应用

用python爬虫保存美国农业部网站上的水果图片

遇见

Python GitHub 爬虫

【SpringBoot】给你的 CommandLineRunner 排个序

遇见

Java Spring Boot

揭秘|为何程序员们能一直保持高收入?

丁长老

学习 程序员 写作 高薪

软件世界中的个人英雄与团队协作

王泰

团队管理 软件工程 团队协作

死磕Java并发编程(6):从源码分析清楚AQS

Seven七哥

Java Java并发 并发编程 AQS

最近的一些人生感悟

小智

人生 哲学

回"疫"录(1):口罩危机也许是一种进步

小天同学

疫情 回忆录 现实纪录

回"疫"录(2):不知者无畏

小天同学

疫情 回忆录 现实纪录

写作平台使用感受

小天同学

产品 体验 反馈

过滤数组中重复元素,你知道最优方案吗?

麦洛

数据结构 数组 数组去重

像经营咖啡店一样扩容 Web 系统

Rayjun

Web 扩容

【SpringBoot】为什么我的 CommandLineRunner 不 run ?

遇见

Java Spring Boot

如何画一个闹钟

池建强

视觉笔记

程序员陪娃看绘本之启示

孙苏勇

程序员 生活 读书 成长 陪伴

太慢是不行的

池建强

创业 产品

Nginx代理Oracle数据库连接

遇见

MySQL nginx oracle 反向代理

软件工程的史前时代 -- Therac-25 事件

王泰

质量管理 软件工程 软件危机 软件测试

个人知识管理精进指南

非著名程序员

学习 读书笔记 知识管理 认知提升

【SpringBoot】为什么我的定时任务不执行?

遇见

Java Spring Boot 定时任务 debug

Disruptor为何这么快

Rayjun

Java Disruptor

Facebook在用户增长到5亿时的扩容策略

Rayjun

团队管理 扩容

Zoom的加密算法,到底有什么问题?

X.F

算法 编码习惯 产品设计 安全 编程语言

敏捷(组织)转型的6个准备条件

Bob Jiang

团队管理 敏捷 组织转型

死磕Java并发编程(3):volatile关键字不了解的赶紧看看

Seven七哥

Java Java并发 volatile

理性主义和实证主义

王泰

理性主义 实证主义 哲学 软件工程

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