【ArchSummit架构师峰会】基于大模型的基础框架、中台、应用层等专题全覆盖 >>> 了解详情
写点什么

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

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

关注

评论

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

强大的字体设计编辑:FontLab 8最新激活版

胖墩儿不胖y

Mac软件 字体设计 字体编辑 设计字体软件

一起学Elasticsearch系列-写入原理

Java随想录

Java 大数据 elastic

重塑招聘的价值,AI能扮演好企业的“人才捕手”吗?

用友BIP

AI招聘

利用Prompt学习更多示例,提高大模型性能

百度开发者中心

人工智能 模型

被面试官PUA了:创建索引时一定会锁表?

王磊

Java 面试

播下开源教育的种子分论坛圆满举办

开放原子开源基金会

开源

Image2icon中文版激活 for Mac(icon图标设计软件) v2.18

mac大玩家j

Mac软件 图标工具

大数据从业者必知必会的Hive SQL调优技巧 | 京东云技术团队

京东科技开发者

电网调度自动化系统的发展规律

邹德虎

技术译文 | 微服务测试——契约测试

AREX 中文社区

微服务 测试 契约测试

文体中心场地预订小程序开发笔记一-功能设计

CC同学

DevSecOps端到端的安全能力构建为什么重要?

极狐GitLab

IntelliJ IDEA安装教程

小魏写代码

解决网络协议服务器问题的关键:定位能力与抓包技术

华为云开发者联盟

网络协议 开发 华为云 华为云开发者联盟

文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题

福大大架构师每日一题

福大大架构师每日一题

用友BIP国资云赋能国资监管迈入智能化新局面

用友BIP

国资监管

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理 | 京东云技术团队

京东科技开发者

Java debug 后端

DDD学习与感悟——向屎山冲锋 | 京东云技术团队

京东科技开发者

架构 DDD 六边形

大模型加持下,AI招聘的“下一站”

用友BIP

AI招聘

【收藏】法律人办案必备检索网站最新汇总!附检索技巧

科技汇

20231225 介绍一个我解决过的难题

Luke

数仓调优实践丨SQL改写消除相关子查询

华为云开发者联盟

数据库 大数据 华为云 华为云开发者联盟 华为云GaussDB(DWS)

生成式 AI 的下一阶段将走向何方?

Baihai IDP

深度学习 程序员 AI 白海科技 GenAI

「模问题」AI原生小游戏强势来袭,一起为AI失眠吧!

飞桨PaddlePaddle

人工智能 游戏 文心大模型 AI原生应用

软件开发

Geek_8da502

用友全球司库十问(八)|集团企业如何做好资金集中化管理?

用友BIP

全球司库 资金集中管理

【AI趋势发展】 主赛道:技术人的 2023 总结

雪奈椰子

主馆位置即将售罄“2024北京信息通信展会”众多知名企聚京城

AIOTE智博会

通信展 信息通信展

终端闲思录(5)- 终端与缓冲的关系

黑客不够黑

终端 缓冲

《2023 中国信通院IOMM企业数字化转型发展双象限洞察》发布,转型者象限&赋能者象限各有40+企业上榜

信通院IOMM数字化转型团队

数字化转型 IOMM ICT深度观察

AI数字人不间断直播是什么?数字人直播带货如何搭建?

青否数字人

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