写点什么

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

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

关注

评论

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

Github首次开放,一天遭狂转 50w 次!大厂内部不外传的 100 万字 Java 面试手册!

编程菌

Java 编程 程序员 面试 计算机

消息队列架构设计

thewangzl

讲透学烂二叉树(三):二叉树的遍历图解算法步骤及JS代码

zhoulujun

二叉树 二叉树遍历 前序遍历 中序遍历 后续遍历

架构实战营 毕业设计项目

梦寻解语花

架构实战营

《社会心理学》-怎样说服他人?

箭上有毒

8月日更

企业研发效能提升之道 —— 管中窥豹,窥一斑而知全豹

在天涯的海角

研发效能

架构实战0期毕业设计---电商秒杀系统

谢博琛

JavaScript new 关键词解析及原生实现 new

zhoulujun

JavaScript new

【设计模式】备忘录模式

Andy阿辉

C# 编程 后端 设计模式 8月日更

讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡

zhoulujun

二叉树 平衡二叉树 红黑树

QDS05 Prometheus

耳东@Erdong

Prometheus 8月日更

没有银弹

escray

学习 极客时间 如何落地业务建模 8月日更

可视化接口管理平台 YApi,让你轻松搞定 API 的管理问题

xcbeyond

工具 接口管理 YAPI 8月日更

架构实战营毕业设计

林子钧

架构实战营 毕业设计

JDK的泛型如何工作的

卢卡多多

Java泛型 8月日更

MinIO存储服务客户端使用指南(三)

liuzhen007

8月日更

二叉查找树的迭代遍历

泽睿

二叉树

10篇校招/社招面经请你查收~

王知无

TypeScript那些最佳实践

思诚^_^

typescript

讲透学烂二叉树(四):二叉树的存储结构—建堆-搜索-排序

zhoulujun

二叉树 堆排序 二叉堆 二叉堆排序 二叉树排序

架构课程第4次作业

听闻

现代分布式架构设计原则-伸缩性

松先生

可伸缩 伸缩 弹性扩容

Linux之scp命令

入门小站

Linux

毕业总结

梦寻解语花

架构实战营

select、poll、epoll之间的区别

一个大红包

8月日更

JVM空间分配担保机制

W🌥

Java JVM 8月日更

5000字阐述云原生消息中间件Apache Pulsar的核心特性和设计概览

王知无

模块五作业

秀聪

架构训练营

讲透学烂二叉树(六):二叉树的笔试题:翻转|宽度|深度

zhoulujun

二叉树 二叉树遍历 二叉树翻转

instanceof运算符的实质:Java继承链与JavaScript原型链

zhoulujun

JavaScript 继承 原型链 instanceof 继承链

随机字符串,随机密码生成器

入门小站

工具

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