大厂Data+Agent 秘籍:腾讯/阿里/字节解析如何提升数据分析智能。 了解详情
写点什么

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

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

关注

评论

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

一文教你如何发挥好 TDengine Grafana 插件作用

TDengine

时序数据库 ​TDengine

大模型训练:文本分类的未来之路

百度开发者中心

大模型训练 #人工智能

材质、纹理、贴图的区别和关联

3D建模设计

材质 纹理 贴图

如何精细化管理嵌入式软件项目?ACT汽车电子与软件技术周演讲回顾

龙智—DevSecOps解决方案

🔥🔥🔥还没搞懂嵌入(Embedding)、微调(Fine-tuning)和提示工程(Prompt Engineering)?

石头爱分享

Embedding openai AIGC GPT-4 prompt 工程

聊聊JDK19特性之虚拟线程 | 京东云技术团队

京东科技开发者

Java JVM 虚拟线程 jdk19 企业号10月PK榜

如何有效的给出反馈(二)

ShineScrum

反馈 敏捷教练 敏捷教练引导 高管

深度学习与预训练语言的突破

百度开发者中心

自然语言处理 大模型训练 人工智能「

人工智能—走向智能化生活

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶技术:实现未来的智能交通

测吧(北京)科技有限公司

测试

🔥🔥🔥序幕:AIGC 进入“平民化”时代

石头爱分享

AI openai AIGC GPT-4 MidJourney

🔥🔥🔥 计算机视觉 GPT-4V 它来了!

石头爱分享

VQA openai AIGC GPT MidJourney

用友招聘云助力中企出海,充盈全球化人才蓄水池

用友BIP

招聘 中企出海

预训练模型在NLP中的应用与优化

百度开发者中心

自然语言处理 大模型训练 #人工智能

实现语言理解与生成的新前沿

百度开发者中心

大模型训练 #人工智能 LLM

微软首款AI芯片代号“雅典娜”;马斯克四年内将让“星舰”上火星丨 RTE 开发者日报 Vol.61

声网

中企全球化案例-能源业:“1+2+3+N”,建设全球领先的智慧司库平台

用友BIP

全球司库 中企出海

优化模型之“平均检出率”

矩视智能

深度学习 机器视觉

分布式事务:XA和Seata的XA模式 | 京东物流技术团队

京东科技开发者

分布式事务 seata XA 企业号10月PK榜

Spring AOP 中被代理的对象一定是单例吗?

江南一点雨

Java spring

【后台体验】运营后台订单详情设计分享 | 京东云技术团队

京东科技开发者

后台开发 后台管理系统 订单系统 企业号10月PK榜 运营后台

TimeWise-Jira工时管理插件6.0.0发布!对比测评某知名工时插件,谁的数据处理性能更胜一筹?

龙智—DevSecOps解决方案

TimeWise Jira工时管理插件

强化学习与深度学习相结合的新趋势

百度开发者中心

#人工智能 LLM 大语言模型

软件测试/测试开发丨AI大模型应用开发实训营,文末领学习资料

测试人

人工智能 大数据 程序员 软件测试

[大厂实践] 重新发明后端子集

俞凡

算法 Google 大厂实践

身为产品经理该如何向客户推广API商品数据接口

Noah

API接口文档 API 安全 API 接口

七张图解锁Mybatis整体脉络,让你轻松拿捏面试官

小小怪下士

Java 程序员 mybatis

人工智能 | AI驾驶系统:改变汽车产业的革命

测吧(北京)科技有限公司

测试

游戏和 NFT 的以太坊代币开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

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