写点什么

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

评论

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

OASA 厂商三未信安完成与 Anolis OS 及其衍生版适配,密码卡性能与稳定性获验证

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥生态

非凸科技走进北大汇丰,揭秘数智交易前沿技术与人才密码

非凸科技

AI思维导图生成器哪个好?5个导图软件大盘点!

职场工具箱

思维导图 办公软件 AI软件 AIGC 思维导图软件

国产化替代是个伪命题?被误解多年的开源软件,如今怎么样了

禅道项目管理

信创 企业安全 开源软件 项目管理软件 国产化替代

ShareSDK全面适配鸿蒙NEXT

MobTech袤博科技

sharesdk mobtech 鸿蒙 os

携手龙蜥,Alinux 最佳 AI 镜像服务商公布,堡塔、飞致云等 6 家企业实力登榜

OpenAnolis小助手

AI 操作系统 龙蜥社区 Alibaba Cloud Linux

从Curl到文档发布:Apipost让接口调试与文档协同更优雅

数据追梦人

电机控制的数字化升级:基于DSP和FPGA的仿真与实现

DevOps和数字孪生

2025年3月文章一览

codists

Python

什么是DNS劫持?DNS劫持如何预防和应对?(国科云)

国科云

通义灵码助力技术求职:如何成为笔试面试冲刺的“超级助手”

阿里云云效

阿里云 云原生

如何编写更好的单元测试

俞凡

最佳实践 软件测试

探讨React Native与小程序结合的技术架构

xuyinyin

布鲁可第3届BFC创作赛第2季度「破茧赛季」正式启幕,赛事体系迎来新升级

财见

「摩根士丹利」最新人形机器人研报:头部人形机器人公司梳理和趋势分析(附报告)

机器人头条

科技 大模型 人形机器人 具身智能

【征程 6】工具链 VP 示例为什么能运行

地平线开发者

自动驾驶 算法工具链 地平线征程6 底层软件

BSO收购InterCloud,强化高性能云连接解决方案

财见

中小企业数字化转型痛点与解决方案

天津汇柏科技有限公司

数字化转型

数字货币交易所开发中的常见问题与解决方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

SITA收购CCM,通过将旅游技术与高端设计相结合

财见

SpringAI用嵌入模型操作向量数据库!

王磊

1688代采系统到底牛在哪?揭秘核心功能和技术硬骨头

代码忍者

MindSpeed细粒度DualPipe通信掩盖,实现AllToAll和EP通信双掩盖,内存优化40%

科技热闻

CAD中对象的等分操作方法

极客天地

Mac电脑必备文件管理器推荐,MacBook文件资源管理软件哪家强?

阿拉灯神丁

MacBook CleanMyMac Mac软件 文件管理软件 Path Finder

CAD中绘制带宽度属性的多段线方法

极客天地

通义灵码助力技术求职:如何成为笔试面试冲刺的“超级助手”

阿里巴巴云原生

阿里云 云原生

天润云2024财报:AI收入增长72.5%,营收毛利再创新高!

天润融通

SysOM AI 可观测体系:零侵入、低开销,让系统透明化

OpenAnolis小助手

AI 运维 操作系统 龙蜥社区 AI可观测

《华为云确定性运维专刊》第六期正式发布!

华为云开发者联盟

运维 华为云

轻帆云智能ITSM应用最佳实践,助力IT共享服务中心高效运营

云智慧AIOps社区

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