初识React Native
什么是React Native
React Native 是一个用于编写真实、原生渲染的 iOS 和 Android 移动应用的 JavaScript 框架。它基于 React,Facebook 的 JavaScript 库用于构建用户界面,但与其针对浏览器不同,它针对移动平台。换句话说:Web 开发人员现在可以使用我们已经了解和喜爱的 JavaScript 库编写真正“原生”的移动应用,而不必离开 JavaScript 的舒适区域。而且,因为大多数代码可以在不同平台之间共享,React Native 让同时为 Android 和 iOS 进行开发变得非常容易。
与 React for the Web 类似,React Native 应用程序使用 JavaScript 和类似 XML 的标记(称为 JSX)编写。然后,在幕后,React Native “桥接器”调用 Objective-C(用于 iOS)或 Java(用于 Android)中的原生渲染 API。因此,你的应用程序将使用真正的移动 UI 组件进行渲染,而不是 Web 视图,并且看起来和感觉像任何其他移动应用程序一样。React Native 还为平台 API 暴露了 JavaScript 接口,因此你的 React Native 应用程序可以访问平台功能,例如手机摄像头或用户位置。
React Native 目前支持 iOS 和 Android,还有潜力扩展到未来的平台。在本文中,我们将同时涵盖 iOS 和 Android。我们编写的绝大部分代码将是跨平台的。
React Native的优势
React Native 实际上使用其宿主平台的标准渲染 API 进行渲染,这使其在跨平台应用程序开发的现有方法中脱颖而出,例如 Cordova 或 Ionic。使用 JavaScript、HTML 和 CSS 的组合编写移动应用程序的现有方法通常使用 webview 进行渲染。虽然这种方法可以工作,但也存在缺点,特别是性能方面。此外,它们通常无法访问宿主平台的一套本地 UI 元素。当这些框架尝试模仿原生 UI 元素时,结果通常感觉“有点差强人意”;逆向工程所有细节,如动画,需要大量的工作,并且它们很快就会过时。
相比之下,React Native 实际上将你的标记转换为真实的本地 UI 元素,利用了在你正在使用的任何平台上渲染视图的现有方法。此外,React 与主 UI 线程分开工作,因此你的应用程序可以保持高性能而不会牺牲功能。React Native 中的更新周期与 React 中的相同:当 props 或 state 发生变化时,React Native 会重新渲染视图。React Native 与浏览器中的 React 的主要区别在于,React Native 是通过利用其宿主平台的 UI 库来实现这一点,而不是使用 HTML 和 CSS 标记。
对于习惯于使用 React 在 Web 上工作的开发人员来说,这意味着你可以使用熟悉的工具编写具有原生应用程序性能和外观的移动应用程序。React Native 还在开发体验和跨平台开发潜力方面代表着对正常移动开发的改进。
开发体验
如果你以前曾经开发过移动应用程序,你可能会对使用 React Native 的简易性感到惊讶。React Native 团队已经将强大的开发工具和有意义的错误消息集成到框架中,因此使用强大的工具是你开发体验的自然组成部分。
例如,由于 React Native 只是 JavaScript,你无需重新构建应用程序即可看到你所做的更改反映出来;相反,你可以按下 Command+R 键来刷新你的应用程序,就像你刷新任何其他网页一样。等待应用程序构建的时间可能会积少成多,与之相比,React Native 的快速迭代周期感觉就像是一种天赐良机。
此外,React Native 还让你可以利用智能调试工具和错误报告功能。如果你熟悉 Chrome 或 Safari 的开发者工具(见图 1-1),你会高兴地知道你也可以将它们用于移动开发。同样,你可以使用你喜欢的任何文本编辑器进行 JavaScript 编辑:React Native 不会强迫你在 Xcode 中开发 iOS,也不会在 Android Studio 中开发 Android。
除了对你的开发经验进行日常改进外,React Native 还有可能对你的产品发布周期产生积极影响。例如,苹果允许基于 JavaScript 的应用行为变更通过热更新来加载,无需进行额外的审查周期。
所有这些小的好处加起来可以节省你和其他开发人员的时间和精力,让你能够专注于工作中更有趣的部分,并且整体更加高效。
代码重用和知识共享
使用 React Native 可以极大地减少构建移动应用程序所需的资源。任何了解如何编写 React 代码的开发人员现在都可以使用相同的技能集针对 Web、iOS 和 Android 进行开发。通过消除根据目标平台“隔离”开发人员的需要,React Native 让你的团队能够更快地迭代,并更有效地共享知识和资源。
除了共享知识外,你的大部分代码也可以共享。你编写的并非所有代码都将是跨平台的,根据你在特定平台上需要的功能,你偶尔可能需要涉足 Objective-C 或 Java。但是,使用 React Native 跨平台重新使用代码非常容易。例如,Facebook Ads Manager 应用程序的 Android 版本与 iOS 版本共享了其代码库的 87%,如 React Europe 2015 主题演讲所述。
风险和缺点
与任何事物一样,使用 React Native 也并非没有缺点,React Native 是否适合你的团队实际上取决于你的个人情况。
最大的风险可能是 React Native 的成熟度,因为该项目仍然相对年轻。iOS 支持于 2015 年 3 月发布,Android 支持于 2015 年 9 月发布。文档肯定还有改进的空间,并且仍在不断发展。某些 iOS 和 Android 上的功能仍然不受支持,社区仍在发现最佳实践。
因为 React Native 在你的项目中引入了另一层,所以它也可能使调试变得更加棘手,特别是在 React 和宿主平台的交集处。
React Native 仍然年轻,适用于使用新技术的一般注意事项也适用于这里。尽管如此,总的来说,我认为收益大于风险。
总结
React Native 是一个令人兴奋的框架,它使 Web 开发人员可以利用其现有的 JavaScript 知识创建强大的移动应用程序。它提供了更快的移动开发速度,以及更高效的代码共享,涵盖 iOS、Android 和 Web,而不会牺牲最终用户的体验或应用程序质量。不过,它是新的,仍在不断改进中。如果你的团队能够处理与使用新技术相关的不确定性,并且希望为不止一个平台开发移动应用程序,那么你应该考虑使用 React Native。

