写点什么

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

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

关注

评论

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

新签约 | 从数小时到实时:海康智联用时序数据库 TDengine 加速智慧交通决策

TDengine

tdengine 时序数据库

泡泡玛特成功在于设计?投资教父卫哲说:这是一场“产品高效创新”的胜利

赛博威科技

人工智能 产品设计 产品创新

以 StarRocks 4.0 为核,引领企业迈入 AI 实时湖仓新时代

镜舟科技

人工智能 数据分析 BI StarRocks 湖仓一体

Dify 预建集成指南:无缝连接 MaaS、API 与 MCP 平台

伊克罗德信息科技

系统性能提升 3 倍,存储成本降 80%:金恒科技用时序数据库 TDengine 加速钢铁智造

TDengine

开放原子大会上最意外的一幕:TDengine 被点名两次!

TDengine

tdengine 时序数据库 开放原子基金会

活动推荐丨「实时互动 × 对话式 AI」主题有奖征文

RTE开发者社区

漫格拼车系统:一站式同城拼车平台解决方案

微擎应用市场

智能光伏时代:"四可"技术如何提升电站综合价值

西格电力

分布式光伏并网 光伏四可装置 分布式光伏发电 分布式光伏产品

CVE-2025-59287(RCE 漏洞)将 WSUS 变为攻击载体:使用 ADAudit Plus 追踪可疑进程行为

运维有小邓

AD域 AD域审计

重磅揭晓!「2025龙蜥社区年度优秀贡献者」榜单来了,恭喜上榜企业和个人

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥

共筑AI时代开源OS新生态,龙蜥社区走进 Arm MeetUp 议程公布

OpenAnolis小助手

操作系统 龙蜥meetup

采集华为云 CCI 日志到观测云最佳实践

观测云

华为云

OceanBase 年度发布会 Hands-on AI Workshop 回顾

老纪的技术唠嗑局

rag

保姆级教程:3分钟带你轻松搭建N8N自动化平台!(内附视频)

王磊

读书助手微信小程序:高效识字记词的阅读好帮手

微擎应用市场

全球首个语音 AI 广告平台问世;Sam Altman 与 Jony Ive:合作新硬件将「如湖畔山间小屋般平静」丨日报

RTE开发者社区

告别耗时无果:迭代构建AI知识库,帮业务部门轻松上手、早见效益

Fabarta

AI知识库

越客证书查询系统:高度自定义的全场景证书管理解决方案

微擎应用市场

【征文计划】视觉AI赋能零售:Rokid Glasses智能购物清单系统的架构设计与实现

穿过生命散发芬芳

Rokid

在企业级 Java 中应用领域驱动设计:一种行为驱动方法

码界行者

DDD BDD

漫格同城信息程序:一站式打造本地微信同城分类信息平台

微擎应用市场

Dify平台是否提供webhook或事件驱动的集成选项?

伊克罗德信息科技

小度科技CEO李莹WISE2025演讲:智能硬件迈向"主动思考"伙伴时代

科技大数据

Java内存排查太难?阿里云操作系统控制台上线「内存诊断」新利器

阿里云基础软件

Java

朝阳永续基于阿里云 Milvus 构建金融智能投研产品“AI 小二”

阿里云大数据AI技术

人工智能 阿里云 Milvus 向量数据库

DongSQL数据库内核V1.1.0介绍

京东零售技术

直播预告:LLM for AIOPS,是泡沫还是银弹? |《AI 进化论》第六期

OpenAnolis小助手

AI 操作系统

超高清产业,集体打响电视的翻身仗

脑极体

AI

一句话生成视频!腾讯元宝上新“文生视频”能力

科技大数据

告别“数据孤岛”,基金公司如何构建秒级响应的统一分析底座?

镜舟科技

金融科技 OLAP StarRocks 湖仓 向量化引擎

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