我正在考虑将 React Native 用于新的 Web 应用程序。是否可以使用它同时发布 iOS 和 Android 应用程序?
我知道它在路线图上,但我不清楚它是一个单独的开源项目(例如,React Android 与 React Native),还是只是一个(例如,React Native)。
我正在考虑将 React Native 用于新的 Web 应用程序。是否可以使用它同时发布 iOS 和 Android 应用程序?
我知道它在路线图上,但我不清楚它是一个单独的开源项目(例如,React Android 与 React Native),还是只是一个(例如,React Native)。
TLDR:很可能你可以。但这取决于您的用例。
您可以争取大约80~99+% 的代码重用率(取决于您使用多少 Android/iOS 原生视图/module,例如。您是否有自定义图形代码或低级 TCP 网络代码;这些只能在本机代码中完成; 并作为 API 暴露给你的 JS 代码。特定于平台的 JS 代码的数量实际上是最少的。此外,你还可以使用平台检查,如if (Platform.OS === 'android'){}
来解决那个)代码重用,这非常好。Dropbox 和其他公司也做过类似的项目:使用 c++ 构建 iOS 和 Android 项目之间的“共享”组件,同时在原生 iOS(Objective-c 或 swift)和 Android(java)中实现大部分 UI 代码。但是现在你正在用 Java 和 Objective-C 或 Swift 做 C++,更多的语言需要掌握,更多的复杂性和更多的脑力消耗殆尽。并且可能需要一些非常艰难的体操动作才能使不同的本机代码在 iOS 和 Android 中工作,再加上调试......
React Native 使得用 JavaScript 编写几乎所有内容变得更加容易。但是有一个问题,只有大约 80% 的 JS 代码可以共享。在可预见的未来,您仍然需要为 Android 和 iOS 版本编写“特定于平台”的 JS 代码。
这就是为什么 FB 说他们的目标是“一次学习,随处编码”而不是“到处运行”。
但是除了代码重用之外它仍然非常好(与维护两个完全不同的版本相比,80+% 的代码重用仍然是一个很大的改进:Android 和 iOS 是吗?)
Cmd +R 刷新应用程序是开发速度的巨大提升。等待一个大项目编译只会让你觉得自己快要死了。
由于使用 React,您可以免费获得声明式 UI。这是另一个很棒的加分项!因为您不再需要经常“挖掘”特定的 UI 代码。数据变了?只需“刷新”它,用户界面就会相应地更新。没有浪费脑汁。
我只是将我不太复杂的 Android React Native App 移植到 iOS。我花了3 天时间。该应用程序的 iOS 版本请求是一个相当突然和计划外的举动。因此,如果我也为 iOS 制定了 Android 计划,肯定会更快。巨大的胜利:)
另一个很大的好处是无需经历地狱般的 1 周应用商店审查过程即可进行热代码推送。所以不要再这样了,“是的,我们的应用程序被批准了。让我们发布吧。哦,Shiiit。严重的错误,我们的应用程序不断崩溃(在你的修复生效之前,这种情况至少会持续发生一周)。而且你必须恳求 Apple 加快速度过程”。这是可能的,因为代码库的主要部分将用 JS 编写,并且使用AppHub或CodePush等工具,您几乎可以立即将代码部署给您的用户。这是Apple有条件地允许的。
3.3.2 应用程序不得下载或安装可执行代码。如果所有脚本、代码和解释器都打包在应用程序中而不是下载,则解释代码只能在应用程序中使用。上述唯一的例外是由 Apple 的内置 WebKit 框架下载和运行的脚本和代码,前提是此类脚本和代码不会通过提供与预期和广告目的不一致的特性或功能来改变应用程序的主要目的提交到 App Store 的应用程序。
最后,作为一个开源项目,项目寿命往往是一个问题。对于 React Native 来说不是问题。由(FB Ads Manager)内部使用,由 Facebook 的 FB(十几个 FB 工程师?)支持,拥有近 500 名贡献者和 25k Stars,React Native 充满活力。眼见为实:)(https://github.com/facebook/react-native)
编辑 1
我意识到我显然有点偏见,只谈论关于 React Native的好东西。因此,请查看https://productpains.com/product/react-native/和 Github 问题以了解全貌。这绝对不是灵丹妙药。话虽如此,它满足了我的大部分用例,而且我看不到我很快就会使用原生 iOS 或 Android。
编辑 2 Facebook (duh ..) 发布的 Facebook F8 会议应用程序是 100% 开源的,他们有一个非常好的教程,向您展示如何同时拥有iOS 和 Android 原生体验(90% 与原生一样好?),同时,实现了 85% 的代码重用。检查一下-> https://makeitopen.com
编辑 3 您可能还想查看 Flutter 及其优缺点:)
如果您想要真正的原生体验,那么拥有单个代码库是没有意义的。目前我们有像 React Native 中的 NavigatorIOS 这样的东西,它提供了一个 iOS 风格的 UI 来在应用程序屏幕之间导航,但是如果我们只是开始在 Android 上使用它,它不会感觉像一个真正的 Android 应用程序。
因此,我希望在时机成熟时看到 NavigatorAndroid 组件或类似组件,对于在平台之间表现不同的各种其他组件也是如此。
您将获得的一个好处是,任何应用程序逻辑(可能是商店或您的后端交互)都可以用 JavaScript 文件编写,然后由 iOS 和 Android 包含。
因此,虽然您不会从 React Native 获得一次性编写、随处运行的开发人员体验,但我希望看到一个解决方案,在两个平台上都提供一流的 UI,同时鼓励尽可能多的重用。我个人也希望看到强大的构建工具来帮助在多个平台上开发和发布。
React Native for Android 刚刚发布,Android 文件夹将在创建新项目时与 iOS 文件夹一起创建。
只是提到了 NavigatorIOS 的另一个提示。Facebook 并没有真正维护 NavigatorIOS 的代码。相反,他们专注于 Navigator。
是的。我们正在生产中运行它,拥有大约 500 万注册用户。
有些东西有点落后于 iOS,但很快就会迎头赶上。这是一辆很好的旅行车。