React Native是否已取代Native?

作为iOS开发人员,我很快就判断出React Native,并认为这是构建移动应用程序的另一种次等且基本的方法。 我认为,显然,如果应用程序是用JavaScript编写的,则不会感到原生,但我所忽略的东西已成为迄今为止最先进的跨移动解决方案。

可以猜到,当React Native发布并受到大量炒作时,我希望平台会很快消失。 我可能只是担心自己的工作安全性,因为JavaScript程序员现在能够开发本机应用程序,但是我认为问题更加严重了。 我担心这会导致一波不太自然或自然的应用程序浪潮。

在使用该平台玩了将近一年之后,我开始喜欢它的开发模式,大多数样式技术,甚至用代码编写视图。 这就提出了一个问题,React Native是否取代了本地移动开发?

UIKit最近为我做了什么?

当iOS在2008年开设App Store时,它便将开发解锁到了一个我们从未见过的世界。 但是随着岁月的流逝,Objective-C和iOS开发模式开始显示出自己的时代。 Auto-layout和MVC是主要的iOS开发模式,通常会吸引开发人员来创建大量的,充满错误的ViewController文件。 当然,用Objective-C编写将应用程序锁定在iOS平台上,并且随着Android用户迅速超过iPhone用户,这成为了一个巨大的痛点。

React和React Native本质上具有一种开发模式。 通过组件的单向数据流。 需要几个示例项目来采用,但是它从根本上改变了我们构建视图的方式。 现在,我们可以根据其输入来推断视图的外观,因为这些组件具有功能性和确定性。

除了巩固新的移动开发模式外,React Native还将移动开发与大型JavaScript社区联系在一起。 为了管理依赖关系,我们现在有NPM。 对于更多功能性的数组操作,我们现在有ES6和lodash。 可靠的开源JS项目列表远远超过了Objective-C的开源社区,现在移动开发人员可以利用它。

本机开发具有如此缓慢的开发迭代。 要在应用程序的配置文件页面上更改像颜色一样简单的内容,您需要重新编译,运行,导航到屏幕,最后验证更改。 React Native仅需构建一次应用程序,然后每次进行更改便重新加载JavaScript,从而彻底改变了工作流程。 无需等待编译。 此外,React Native还包括热模块重载,这使开发人员可以保存文件并立即查看视觉和逻辑更改,而无需重置应用程序的状态,并且要求开发人员手动浏览应用程序以验证状态。 这些是未来的工具。 (我什至没有时间进行Redux和时间旅行调试)

好吧,有什么坏消息?

是什么阻止每个人都在React Native中编写每个新应用? 首先,尽管Facebook和React Native的开源团队在与Apple和Android设备API(例如,推送通知,手势,摄像头等)实现可靠接口方面做得很出色,但许多API仍未完成。 如果您对应用程序的想法需要音频,视频,麦克风,蓝牙或地理位置,那么您将需要依靠第三方解决方案或在Objective-C和Java中实现该功能以及创建接口。

接下来,由于React Native仍在成熟,对该软件包的更新通常会有重大更改,并且需要大量重构。 您可能会问:“为什么不坚持使用您开始使用的版本?”好吧,如果Facebook发布了您需要的新界面,或者您真正想要的第三方程序包需要的版本比您需要的版本新,那么可能是该死的时候了并按照Facebook的指南升级React Native。

当涉及到移动开发,尤其是iOS时,导航是用户体验的重要组成部分。 令我惊讶的是,发现React Native的Navigator实际上比原生iOS或Android更具挑战性。 这是React Native社区中的一个已知痛点。 Facebook正在转向另一个名为NavigationExperimental的导航组件,该组件似乎已经解决了围绕Navigator的许多问题。 使用这种组件名称,您的CTO在审查您的下一个请求时会说什么?

使用React Native之前要问的问题

您的用户是否希望该应用程序反映其移动操作系统的独特设计准则(例如,人机界面准则,材料设计)? 如果是这样,您是否仍可以使用跨平台解决方案获得足够的收益? 每个应用程序仍将具有相同的开发模式以及共享的业务逻辑和网络请求,但是是否足以证明在同一目录中编写两个视觉上不同的应用程序呢?

您的应用程序是否需要React Native尚不支持的任何设备功能(例如3D触摸,地理位置)? 如果可以,您是否愿意使用开源第三方解决方案或自己编写接口?

在考虑了应用程序的布局之后,React Native中的当前导航解决方案是否满足您的需求? 在回答该问题之前,可能需要进行一些原型设计。

总结

React Native是一个合法的跨平台移动解决方案,可创建与本机应用程序无法区分的应用程序。 随着它进入移动开发领域,它带来了改进的模式,创新的工具和充满活力的社区。 尽管它可能不是您构建下一个应用程序的平台,但它无疑是移动开发未来的一部分,因此值得进行评估。