NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:078645

评论

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

干货 | Chrome 浏览器+Postman还能这样做接口测试 ?

霍格沃兹测试开发学社

GitHub永远的神!“阿里爸爸”终于总结出15W字Java源码真题手册

钟奕礼

Java 编程 架构 java面试 技术宅

这份数据安全自查checklist请拿好,帮你补齐安全短板的妙招全在里面!

Java-fenn

java;

字节码增强技术之 Java Agent 入门

Java快了!

java;

字节架构师离职后,熬夜整理55W字Java面试手册,逆风翻盘进阿里

钟奕礼

Java 编程 架构 后端 java面试

字节前端二面高频面试题

loveX001

JavaScript 前端

真的强!来自扫地僧总结的39W字上千道Java一线大厂面试题手册,成功助我拿下蚂蚁金服offer!

钟奕礼

Java 编程 架构 后端 java面试

实战 | 电商业务性能测试(二): Jmeter 参数化功能实现注册登录的数据驱动

霍格沃兹测试开发学社

干货 | APP自动化Android之属性获取与断言

霍格沃兹测试开发学社

干货 | Docker 还可以搭建Web服务器nginx ?这么宝藏的吗?

霍格沃兹测试开发学社

龙蜥开发者说:海纳百川,有容乃大,我在龙蜥社区的升级之旅 | 第 11 期

OpenAnolis小助手

开源 Linux内核 sig 龙蜥开发者说 epbf

Java 序列化10倍性能优化对比测试

FunTester

5000页?一份字节跳动Java面试全解手册发布!瞬间登顶各大搜索栏

钟奕礼

Java 编程 架构 后端 java面试

干货 | H5性能分析实战来啦~

霍格沃兹测试开发学社

工赋开发者社区 | Transformers如何用于遥感?阿联酋MBZUAI最新《Transformers遥感处理》综述,涵盖60+种ViT遥感方法

工赋开发者社区

直播回顾|容器如何提升应用的稳定性?(附PPT下载)

BoCloud博云

云计算 容器 云原生

大数据和人工智能离不开云计算,他们之间有什么关系?

Finovy Cloud

人工智能 云计算 大数据

HiveServer2 内存泄漏问题定位与优化方案

Java-fenn

Java Java 面试 #java

设备健康管理平台如何为企业打造五大核心设备管理体系?

PreMaint

企业设备管理 预测性维护 设备健康管理

干货 | JavaScript脚本注入,完成Selenium 无法做到的那些事

霍格沃兹测试开发学社

干货 | REST-assured 获取日志到文件并结合 Allure 报告进行展示

霍格沃兹测试开发学社

LED显示屏有哪些让你无法拒绝的优点

Dylan

LED显示屏 户外LED显示屏

耗时半年,堪称奇迹!阿里架构师整合出258W字Java全栈面试题

钟奕礼

Java 编程 程序员 架构 java面试

真的香!这份《Java面试题库大全》在Github一夜爆火后直接被各大厂要求封杀!

钟奕礼

Java 编程 架构 java面试 技术宅

Chrome已实现对H.265/HEVC的硬解支持

微帧Visionular

python 基于aiohttp的异步爬虫实战时间

Java-fenn

Java

一文带你弄懂Kubernetes应用配置管理时间

Java-fenn

java;

Docker常用命令原理与实战

Java-fenn

java;

数字藏品:为什么这么火爆,那么多人购买?

开源直播系统源码

区块链+ NFT 数字藏品 数字藏品开发 数字藏品系统

Java 进阶 (八)Java 加密技术之对称加密、非对称加密、不可逆加密算法

Java-fenn

Java

干货 | Web自动化测试中显式等待与隐式等待该怎么用?

霍格沃兹测试开发学社

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