写点什么

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

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

关注

评论

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

Java垃圾回收GC概览

Java JVM GC

cglib入门后篇

Rayjun

Java cglib

把最新JAVA面试真题(阿里/字节跳动/美团)整理出来,却被自己菜哭了,赶紧去刷题了

Java架构追梦

Java 阿里巴巴 架构 面试

Redis基础—了解Redis是如何做数据持久化的

数据库 redis 编程 计算机

TCP性能分析与调优策略

程序员 计算机网络 网络协议

从一场“众盟科技云滇之播”,我们发现了美食直播的商业与公益价值

人称T客

云计算简史(完整版)

明道云

可以解除程序员中年危机的职业规划

Java架构师迁哥

5G为数字化转型插上翅膀

CECBC

5G网络安全

京东技术中台Flutter实践之路(二)

京东科技开发者

开源 中台 大前端 Web UI

anyRTC Flutter SDK :全面实现跨平台音视频互动

anyRTC开发者

音视频 WebRTC RTC sdk 安卓

马士兵老师首推Java七条自学路线,自学到底能不能行?自学也能拿到40W年薪?

Java架构追梦

Java 架构 面试 马士兵 项目实战

《迅雷链精品课》第二课:区块链核心技术框架

迅雷链

区块链

JVM真香系列:轻松掌握JVM运行时数据区

田维常

JVM

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,使用数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Java程序员必备,Github上星标55.9k的微服务神级笔记简直太香了,学完感觉自己又行了!

Java架构之路

Java 程序员 架构 面试 编程语言

涨薪神作!华为内部操作系统与网络协议笔记爆火,Java程序员有福了

Java架构之路

Java 程序员 面试 编程语言

数字人民币都来了 黄金还有什么用?

CECBC

数字货币

阿里云视频云实时字幕技术,助力英雄联盟S10全球总决赛

阿里云CloudImagine

游戏开发 直播 语音识别 字幕

【T1543.003】利用 ACL 隐藏恶意 Windows 服务

比伯

Java 大数据 编程 架构 计算机

完美!阿里P8都赞不绝口的世界独一份489页SQL优化笔记

Java~~~

Java 数据库 程序员 架构师 SQL优化

非线性声学回声如何破解?华为云硬核技术为你解决

华为云开发者联盟

算法 音视频

当代开发者的六大真实现状,你被哪一个场景“戳中”了?

华为云开发者联盟

开发者 调研 报告

简要分析近几年商业软件开发平台的现状

Philips

敏捷开发 快速开发 企业应用

Docker

【算法题目解析】杨氏矩阵数字查找

程序员架构进阶

算法 二分查找 杨氏矩阵

IPFS云算力挖矿系统开发技术

薇電13242772558

区块链 IPFS

Pulsar Summit Asia 2020 中文专场议题出炉!

Apache Pulsar

大数据 开源 Apache Pulsar

从零到千万用户,我是如何一步步优化MySQL数据库的?

冰河

数据库 架构 性能优化 分布式数据库 分布式存储

区块链产业,怎样“链”住未来?

CECBC

区块链

「Java并发编程」从源码分析几道必问线程池的面试题?

Java架构师迁哥

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