写点什么

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

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

关注

评论

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

用友与柳钢再续合作新篇,共筑废钢产业数智化新标杆

用友BIP

通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)

阿里巴巴云原生

阿里云 通义灵码

MySQL索引失效场景

电子尖叫食人鱼

MySQL 数据库

DolphinScheduler 社区喜讯:两项学生项目入选“开源之夏 2025”!

白鲸开源

大数据 开源 数据集成 Seatunnel 开源之夏

AI 应用开发(二):Blender 建模助手

北桥苏

人工智能 大模型 AI智能体 AI工作流 MCP协议

数智焕新 “数质”先行 用友BIP为企业补上数据这一课

用友BIP

AI Infra 运维实践:DeepSeek 部署运维中的软硬结合

袋鼠云数栈

数据库 大数据 运维 数据治理 数据平台

稳定币是对 Pi 网络的威胁吗?

TechubNews

快速理解向量和向量数据库

量贩潮汐·WholesaleTide

数据库

用 AI “一句话生成代码”,用创意兑换灵码潮品:技术人的夏日狂欢季来了

阿里巴巴云原生

通义灵码

Aliyun OSS iOS SDK 使用指南

qife

ios 阿里云

从SQL Server到分布式大数据平台:重构企业数据架构

袋鼠云数栈

数据库 sql 数字化转型 数据治理 SQL Server

当空间与数据联动,会展中心如何打造智慧运营新范式?

袋鼠云数栈

数据治理 数据运营 可视化数据 现代产业 数据智慧运营

现代 Web 安全实践:基于 Token 与 Refresh Token 的单点登录 (SSO) 实现

袋鼠云数栈

Web 数字化转型 解决方案 数据管理 单点登录

数据任务调度解决离不开离线开发BatchWorks

袋鼠云数栈

数据库 数据治理 数据调度 数据资源 batchworks

Python Flask 容器化应用链路可观测

观测云

Python

商品中心—库存分桶调配的技术文档

不在线第一只蜗牛

Java spring

昇腾CANN再进化:开放创新繁荣AI生态

极客天地

通义灵码2.5来袭!MCP 功能直接让开发效率提升300%(附实战案例)

阿里云云效

阿里云 通义灵码

用 AI “一句话生成代码”,用创意兑换灵码潮品:技术人的夏日狂欢季来了

阿里云云效

真正好用的企业AI:生于“原生”,成于“一体”

用友BIP

从“工具逻辑”到“体系逻辑”,企业治理为何必须跨越传统BI走向指标驱动?

袋鼠云数栈

数据库 数字化转型 BI 数据可视化 数据管理

无需安装,点击即刻优化GLB模型

袋鼠云数栈

数据治理 数据平台 3D模型 大模型 glb

构建烟草行业设备全生命周期数字基座:新一代MIS的战略选择

中烟创新

3节点开启大数据时代:EasyMR助力中小企业轻装上阵、国产转型

袋鼠云数栈

数据库 大数据 数据治理 数字化 数据平台

用友成功中标茅台集团司库数据管理项目

用友BIP

Sermant指标采集功能:构建指标可观测性实践

华为云开源

开源 微服务架构 sermant

新时代智慧工地如何重塑班会

袋鼠云数栈

数字化转型 数据治理 数据安全 数据服务 数字化治理

电子签名行业唯一独角兽:e签宝荣登《世界独角兽企业发展报告2025》

科技汇

国产化方案如何破解数据迁移困局?

袋鼠云数栈

数据架构 数据治理 大数据平台 数据迁移 数据管理

AI已经很聪明了,为什么我们还需要“ AI Agent 平台”?

袋鼠云数栈

数据平台 AI大模型 AI应用 数据化转型 AI Agent

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