上周在加利福尼亚州的门洛帕克(Menlo Park)举行的 React开发者大会 上,Facebook 宣布 了React Native - 这是 React 这个非常流行的JavaScript类库的纯移动端版本。从表面上看,React Native很像React,通过JavaScript声明语法来定义互动的用户界面。不过在这背后两者有很大不同,React Native展现界面是通过特定于平台的原生控件,而React则是用DOM元素。
React是用于开发前端用户界面的一套JavaScript框架,起初是由Facebook开发,随后实现了开源。React使用声明式的语法和 JSX (他们的JavaScript语法扩展)来描述HTML布局。每个React组件由属性(property)和状态(state)来配置,当状态发生变化时,会触发由单向数据流驱动的UI更新。这些更新通过 虚拟DOM 机制进行优化,确保了实际的DOM更新只包括真正产生了状态变化的部分。
一个典型的React组件如下所示:
var HelloMessage = React.createClass({ render: function() { return <div>Hello {this.props.name}</div>; } }); React.render(<HelloMessage name="John" />, mountNode);
上面的例子中定义了一个名为HelloMessage的React自定义组件。正如React的标准做法一样,该组织中定义了render方法返回一个HTML元素的树结构,以生成DOM。这种以HTML语法风格来定义元素是由JSX支持的,这些语句会被预处理并翻译成React函数调用来实际产生相关HTML元素。
类似的,React Native使用相同的声明式语法来定义原生UI,只不过不是绑定到HTML元素,而是通过自定义类型实现对原生UI组件的映射。下面是来自 ChecklistApp 的示例代码,展现了React Native如何绑定到原生UI组件,比如View和可编辑文本框:
render() { return ( <View style={{marginTop: 20}}> <Text>Checklist</Text> <TextInput style={styles.input} autoFocus={true} onSubmitEditing={this.handleSubmit} /> <View style={styles.list}> {this.renderItems()} </View> </View> ); }
在周三(1月28日)宣布React Native之后,Christopher Chedeau(Facebook的软件开发人员)作了一个题为“深入了解React Native”的 演讲 。在演讲中Christopher指出了React Native比起标准Web开发或原生开发能够带来的三大好处:
在Hacker News上关于Facebook宣布React Native的 讨论 中,Peter Hunt(React的代码贡献者)提供了关于React Native的内部机制的说明:
Facebook并没有宣布React Native何时面向公众发布,目前仍然处于公司内部开发状态。不过整个库的功能已经可用,并且已经用在Facebook的一些已发布应用中,比如 Facebook Groups iOS App 。
查看英文原文: Facebook Enables Native App Development in JavaScript with React Native
感谢邵思华对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。