在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Facebook 宣布 React Native: 开始用 JavaScript 开发移动原生应用

  • 2015-02-14
  • 本文字数:1674 字

    阅读完需:约 5 分钟

上周在加利福尼亚州的门洛帕克(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 开发或原生开发能够带来的三大好处:

  1. 手势识别:基于 Web 技术(HTML5/JavaScript)构建的移动应用经常被抱怨缺乏及时响应。而基于原生 UI 的 React Native 能避免这些问题从而实现实时响应。
  2. 原生组件:使用 HTML5/JavaScript 实现的组件比起原生组件总是让人感觉差一截,而 React Native 由于采用了原生 UI 组件自然没有此问题。
  3. 样式和布局:iOS、Android 和基于 Web 的应用各自有不同的样式和布局机制。React Native 通过一个基于 FlexBox 的布局引擎在所有移动平台上实现了一致的跨平台样式和布局方案。

在 Hacker News 上关于 Facebook 宣布 React Native 的讨论中,Peter Hunt(React 的代码贡献者)提供了关于 React Native 的内部机制的说明:

  • JS 引擎运行于后台线程
  • 主线程中运行原生服务(objc 或者 android),JS 和原生服务的通讯是通过批处理的、异步的消息协议完成(主要是 create_view()、 update_view(),、destroy_view(),、on_event() 等等)
  • React 插件遵循这种通讯协议
  • 通过工具使得跨平台开发更容易一些(比如标准文本组件,跨平台的 flexbox 布局系统)
  • 设计目标就是充分利用原生平台的 UI 组件,并不是成为下一个 Java Swing

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2015-02-14 08:079269

评论

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

PostgreSQL高可用:多主复制解决方案

PostgreSQLChina

数据库 postgresql 开源

等保数据备份和恢复关键点,这些你该知道!

华为云开发者联盟

数据 容灾 恢复

LeetCode题解:127. 单词接龙,双向BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

OpenKruise v0.7.0 版本发布:新增周期任务分发控制器

阿里巴巴云原生

阿里云 容器 开发者 运维 云原生

架构师训练营 1 期 -- 第十三周总结

曾彪彪

极客大学架构师训练营

盘点2020|多线程的遥感大数据行业产品经历

老壳有点爽

大数据 盘点2020 InSAR

建议收藏,mybatis插件原理详解

田维常

mybatis

从阿里离职后人虚了,头也秃了,就剩这份Java性能优化的PDF了

Java架构追梦

Java 架构 面试 性能优化 并发

女朋友突然问我DNS是个啥....

乱敲代码

计算机网络 DNS DNS服务器

扩招1W人,字节跳动内部公开12月份Java岗71道面试题

比伯

Java 编程 架构 面试 程序人生

几款Java开发者必备常用的工具,准点下班不在话下

华为云开发者联盟

Java 工具 开发

边缘计算和5G:我们从何而来?

VoltDB

云计算 大数据 5G 物联网 边缘计算

盘点2020 | 微服务架构下该如何技术选型呢?

xcbeyond

微服务 技术选型 盘点2020 选型原则

干货丨如何使用Redash连接DolphinDB数据源

DolphinDB

数据处理 时序数据库 DolphinDB 数据库开发 redash

程序员因重复记录日志撑爆ELK被辞退!

Java架构师迁哥

阿里华为等大厂如何处理数值精度/舍入/溢出问题

Java架构师迁哥

Tufin联合Cisco,将网络安全自动化进行到底

Geek_448e23

网络安全 自动化管理 云安全

从面试角度分析LinkedList源码

Java旅途

Java List 集合 linkedlist

flink 使用curl,通过RESTful api,上传和删除jar包

Geek_de9857

flink RESTful curl 上传jar 删除jar

Mysql中,1=1和 1=1=1 和 -1=-1 和 -1=-1=-1 和 5=5 和 5=5=5 有什么区别

Geek_de9857

MySQL sql 返回值 1=1=1 -1=1=1

智能微卡口监控系统搭建,智慧平安小区建设解决方案

t13823115967

智慧城市

《O2O实战:他们是如何利用互联网的》.pdf

田维常

互联网

forsage以太坊矩阵系统软件开发|forsage以太坊矩阵APP开发

系统开发

架构师训练营第 1 期第 13 周作业

业哥

盘点2020 | 一个三线程序员的2020年,不卑不亢

沉默王二

程序员 盘点2020 沉默王二

985研究生熬夜23天吃透845页架构宝典 终收割腾讯Java岗offer!再也不用怀疑人生了

比伯

Java 编程 架构 面试 程序人生

90分钟10个手写案例,从源码底层给你讲解7种线程池创建方式

996小迁

Java 源码 架构 资料 笔记

5张图搞懂Java引用拷贝、深拷贝、浅拷贝

bigsai

Java 浅拷贝和深拷贝

DAPP软件系统开发

系统开发

架构师 3 期 3 班 -week4- 作业

zbest

作业 week4

架构师训练营第 13 周学习总结

netspecial

极客大学架构师训练营

Facebook宣布React Native: 开始用JavaScript开发移动原生应用_JavaScript_Matt McComb_InfoQ精选文章