反应本机 & Android?

React Native & Android?

我正在考虑将 React Native 用于新的网络应用程序。是否可以同时发布 iOS 和 Android 应用程序?

我知道它在路线图上,但我不清楚它是一个单独的开源项目(例如,React Android vs React Native),还是只是一个(例如,React原生)。

如果您想要真正的原生体验,那么拥有单一代码库是没有意义的。目前我们在 React Native 中有 NavigatorIOS 之类的东西,它提供了 iOS 风格的 UI 用于在应用程序屏幕之间导航,但如果我们只是在 Android 上开始使用它,它就不会感觉不像是真正的 Android 应用程序。

因此,我希望在时机成熟时看到 NavigatorAndroid 组件或类似组件,并且对于在平台之间表现不同的各种其他组件也是如此。

您将获得的一个好处是任何应用程序逻辑 - 可能是商店或您的后端交互 - 都可以写在 JavaScript 文件中,然后由 iOS 和 Android.

因此,虽然您不会从 React Native 获得一次编写的 运行-everywhere 开发人员体验,但我希望看到一个解决方案首先提供-class UI两个平台,同时鼓励尽可能多的重用。我个人也希望看到强大的构建工具来帮助在多个平台上进行开发和发布。

只是提到了 NavigatorIOS 的另一个提示。 Facebook 并没有真正维护 NavigatorIOS 的代码。相反,他们专注于 Navigator。

Android 的 React Native 刚刚发布,Android 文件夹将在创建新项目时与 iOS 文件夹一起创建。

TLDR:很可能你可以。但这取决于您的用例。

您的目标是实现大约 80~99+% 的代码重用(取决于您使用多少 Android/iOS 本机 views/modules 例如。您有自定义图形代码或 low-level TCP 网络代码;这些只能在本机代码中完成;并作为 API 暴露给您的 JS 代码。platform-specific JS 代码的数量实际上是最小的。另外,您还可以使用 if (Platform.OS === 'android'){} 之类的平台检查来解决代码重用的问题,这非常好。 Dropbox等公司也做过类似的项目:使用c++在iOS和Android项目之间构建了一个'shared'组件,同时在原生[=111]中实现了大部分UI代码=](Objective-c 或 swift)和 Android(java)。但是现在你用 Java 和 Objective-C 或 Swift 来做 C++,更多的语言需要掌握,更多的复杂性和更多的脑汁都付诸东流了。并且可能需要一些超级艰难的体操动作才能使不同的本机代码在 iOS 和 Android 中工作,加上调试...

React Native 使 几乎可以用 JavaScript 编写几乎所有内容变得容易得多。但是有一个问题,只有大约 80% 的 JS 代码可以共享。在可预见的未来,Android和iOS版本,你还需要编写'platform-specific'JS代码。

这就是为什么 FB 说他们的目标是 'Learn once, code anywhere' 而不是到处都是 'run'。

但除了代码重用之外它仍然非常好(80+% 代码重用 与维护 2 个完全不同的版本相比仍然是一个很大的改进:Android 和 iOS 是吗?)

Cmd +R 刷新应用程序对开发速度有很大的提升。 等待一个大项目编译只会让你觉得自己快要死了。

声明式 UI 你免费获得,因为使用了 React。这是另一个很棒的优点! 因为您不再需要经常 'dig' 进入您的特定 UI 代码。数据变了?只是 'flush' 它和 UI 只是相应地更新。不浪费脑汁。

刚刚将我的 Android React Native App 移植到 iOS。我花了 3 天。该应用程序的 iOS 版本请求是一个相当突然和计划外的举动。如果我也为 iOS 构建了 Android,那肯定会更快。 巨大的胜利:)

另一个巨大的好处是能够进行热代码推送,而无需经历地狱般的 1 周应用商店审核流程。所以没有更多,"YAY, our app is approved. Let's release. Oh Shiiit. Critical bug and our app keeps crashing(that's gonna keep happening for at least a week before your fix is live). And you have to beg Apple to speed up the process"。这是可能的,因为代码库的主要部分将用 JS 编写,并且使用 AppHub or CodePush 等工具,您几乎可以立即将代码部署给您的用户。这是 Apple 有条件地 允许的。

3.3.2 An Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code, and interpreters are packaged in the Application and not downloaded. The only exception to the foregoing is scripts and code downloaded and run by Apple's built-in WebKit framework, provided that such scripts and code do not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store.

最后,作为一个 open-source 项目,项目寿命 往往是一个问题。对于 React Native 来说不是问题。由(FB Ads Manager)内部使用并由 Facebook(十几个 FB 工程师?)支持,近 500 名贡献者和 25k 星,React Native 充满活力。眼见为实:) (https://github.com/facebook/react-native)


编辑 1

我意识到我显然有点 偏见,只谈论 React Native 的好东西。所以请检查 https://productpains.com/product/react-native/ 和 Github 问题以获得完整的图片。这绝对不是灵丹妙药。话虽这么说,它满足了我的大部分用例,但我看不到我会很快使用原生 iOS 或 Android。

编辑 2 Facebook 发布的 Facebook F8 会议应用程序 (duh..) 是 100% 开源的,他们有一个非常好的教程向您展示如何拥有 both iOS 和 Android 原生体验(90% 和原生一样好?),同时实现了 85% 的代码 re-use。检查一下 --> https://makeitopen.com

编辑 3 您可能还想查看 Flutter 及其优缺点 :)

React Native 的设计让您可以部署到 iOS 和 Android。当然有一个警告。

React Native 支持 iOS 的时间更长,最近才支持 Android。因此,每个平台支持的内容存在一些差异。

例如,如果您在文本上放置边框,它们将显示在 iOS 上,但不会显示在 Android 上。为了克服这个问题,您需要在文本周围放置一个视图,并为其应用边框。幸运的是,React Native 可以很容易地为每个平台集成单独的样式表(甚至可以在单个样式表上集成特定于平台的样式)。

对 Android 的支持在不断发展,因此 Android 的 React Native 与 iOS 持平只是时间问题。然而,这不应该阻止你。根据我的经验,这是为两个平台快速开发的好方法,而且确实省去了一些麻烦。

您不需要为 android 和 ios 维护单独的代码库。实际上,您可以使用相同的代码库来构建 android & ios。我建议在代码中使用任何内置组件之前阅读 react-native documentation(根据您使用的 react-native 版本)。 例如:- TextInput 组件 onKeyPress 函数仅支持 ios。

如果您正在使用外部库,请检查这些库对 ios 和 android 的支持。 无论如何,您必须分别配置(安装)android 和 ios.

希望这对您有所帮助。

是的。我们 运行 已投入生产,拥有约 500 万注册用户。

有些事情有点落后iOS但很快就会迎头赶上。这是一辆很好的旅行车。