AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

hbase运维故障案例分析

GrowingIO技术专栏

大数据 运维 HBase

浅谈限流组件的应用和设计原则

xiaoxi666

redis sentinel 分布式限流 redisson redis-cell

PostgreSQL正强势回归!

数据库 大数据 时序数据库 tsdb 数据智能

专访融云 CTO 任杰:构建通信云全能力

融云 RongCloud

强推!华为内部都在用的783页大数据处理系统:Hadoop源代码pdf

Java 编程 架构 面试 架构师

云原生时代,腾讯如何做好容器安全体系建设?

腾讯安全云鼎实验室

腾讯云 容器

Druid 集群方式部署 —— 配置调整

HoneyMoose

如何洞察出推荐的关键时刻

石云升

推荐 用户体验 体验设计 8月日更

架构实战营毕业设计

Saber

架构实战营

Druid 集群方式部署 —— 配置 Zookeeper 连接

HoneyMoose

Druid 集群方式部署 —— 端口调整

HoneyMoose

明道实施与需求的耦合

明道云

在明道云上搭建的应用维护管理的几点建议

明道云

人在年轻的时候,最核心的能力是什么?

非著名程序员

认知提升 个人提升 提升自我 8月日更

getInteger还是getIntValue,这是一个问题

FunTester

Java json Groovy

趁着课余时间学点Python(五)用课余时间提升自己关于高级数据类型的知识

ベ布小禅

8月日更

使用 MVC 架构构建 Flask CRUD 应用程序

吴脑的键客

Python flask

双证在手,运维无忧!明道云通过两项国家级质量认证

明道云

分布式认知工业互联网平台如何赋能企业数字化转型?

CECBC

Druid 集群方式部署 —— 启动服务

HoneyMoose

这是一次鸡肋的代码审计

网络安全学海

网络安全 信息安全 计算机 渗透测试 安全漏洞

MQTT-消息传输协议

一个大红包

8月日更

基于 HLS 创建 Golang 视频流服务器

声网

音视频 HLS

【前端 · 面试 】HTTP 总结(六)—— HTTP 版本区别

编程三昧

面试 HTTP 8月日更 http版本

阿里顶级大佬整理出十六个专题的Java面试指南,金九银十不用愁!

Java 编程 架构 面试 架构师

101道经典JavaScript面试题总结(附答案,建议收藏)

前端依依

面试 大前端 JavaScrip

架构实战营模块四作业

maybe

Java操作Office:POI之word生成

程序员架构进阶

Java Apache POI 技术应用 8月日更 代码实战

外包三年给整废了,备战两月终拿到4家大厂offer,阿里P6+这回稳了

Java架构师迁哥

Black Hat 2021上的七大网络威胁趋势

百度开发者中心

最佳实践 方法论

区块链技术改进身份和访问管理(IAM)的10种用例

CECBC

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