Airbnb弃用之后,我们还应该用React Native吗?

4,031 阅读6分钟
原文链接: mp.weixin.qq.com
作者|Charlie Cheever 译者|无明 编辑|覃云

近日,Airbnb 发表了一组由 5 篇博文组成的系列文章(https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c),他们在文章中宣布停止使用 React Native,并将其从代码库中移除,转而使用 Swift/Objective-C/Java/Kotlin。

在过去的几年中,在谈及“是否应该使用 React Native”这个话题时,通常都会有人指出,Airbnb 这家世界级的公司在产品方面做得非常出色,他们在 React Native 上投入了大量精力,并且正在使用它。然而,现在出现了大反转:一家关心产品质量的顶级公司对 React Native 进行了大量投入,在经过非常仔细的研究之后,决定弃它而去。对于任何想使用 React Native 的人来说,这都是一件非常可怕的事情。

另一方面,Airbnb 是 React Native 开源社区的重要贡献者。react-native-maps 和 Lottie 是两个非常重要的库(都包含在 Expo SDK 中),最初由 Airbnb 开发。Leland Richardson 在进入谷歌之前,曾经是该社区最著名的人物之一。人们肯定会记住他们所做出的贡献。

不过,如果你仔细阅读这一系列文章的内容,他们大部分时间都在说 React Native 相当不错,但不适合 Airbnb。就个人而言,这并不会让我感到十分惊讶。数以万计的开发者正在考虑使用 React Native,我与他们中的很多人进行过交谈,我发现考虑使用 React Native 的团队大致可以分为三大类,其中两类团队很可能会取得成功并乐在其中,而对另外一类团队来说可能是个噩梦。

我应该在项目中使用 React Native 吗?

这里有一个快速指南,可以帮助你和你的团队决定是否应该在项目中使用 React Native。

1. 你使用 React Native 从头开始构建一个新应用,并希望使用 JavaScript 开发所有的东西

如果是这种情况,人们通常都会很开心,并可以获得更好的结果。这个时候 Expo 非常适合你,你可以使用大量内置的原生模块,在不需要使用 Xcode 或 Android Studio 的情况下即可完成所有的事情,升级到新版本几乎毫不费劲,而且可以随时轻松推送代码更新,无需向应用商店提交新版本。如果由于某种原因,你需要使用原生代码开发一两个页面,并且已经定义好这些页面的边界,那么这么做通常也没什么问题。如果是我从头开始创建一个新应用,我会选择使用 Expo/React Native。

2. 你正在使用 React Native 开发少量的二级页面

如果你正在考虑使用 React Native 开发一些简单的二级页面,如设置、常见问题解答或“关于”页面(可能只需要把它们嵌入到 WebView),那么你就走运了。从使用体验方面看,这些东西不需要与应用程序的其他部分有密切联系,但整体观感却更像是“原生”的。

3. 你有一个使用 Swift/Java/Objective-C/Kotlin 开发的应用程序,现在你想要使用 React Native 开发其中的一部分

这种“棕色地带”(brownfield)的例子——你有一个使用 Swift 和 Java 开发的应用程序,你想要在跨多个视图或屏幕的地方引入 React Native——更难应付。对于 Airbnb 在这条道路上遇到了很多挫折,我并不感到惊讶。有经验的原生开发者在学习第二种完全不同的技术栈时也会感到沮丧。如果你在同一屏幕上同时使用原生视图和 React Native 视图,在 React Native 方面,你会将数据保存在 JS 对象中,而在原生方面,你会将数据保存在 Swift/Java 的数据结构中,要跟踪客户端状态就会变得很困难。因为 React Native 目前只有一个异步桥接,要在这个层面进行集成,可能会非常复杂,而且效率低下。现在想象一下其他 10 个类似的问题(导航、布局、委托方法、版本控制等)。如果一种技术的开发者总是要去处理另一种技术的最坏情况,那么最终一定会走上一条不归路。

4. 你的公司里有一个 iOS 团队和一个 Android 团队

即使你是前面两种情况中的一种,那些自认为拥有最强 iOS 程序员和 Android 程序员的公司也很难对 React Native 感到满意。iOS 程序员对此尤为不满,他们一般会认为 JS 是对公司代码库的污染,Android 程序员的感受则相对缓和一些。

即使你将 React Native 用在它所擅长的领域,但因为一些非技术问题,要让原生开发和 React Native 开发在企业中大规模并存仍然很困难。

至于它的价值,我几乎赞同 Airbnb 博文中列出的所有对 React Native 的指责。我们可以在 Expo 中发现很多相同的东西。而且我自己列出的受挫清单比这个要长得多。不过,这项技术在很多方面都表现得非常好,而且会越来越好。例如,人们普遍认为,想要获得良好的导航观感就要使用原生导航,但现在来自 Expo 团队的 Brent 已经在 react-navigation 库上进行了大量工作,它很好用,观感也很不错。它已经成为大多数 React Native 应用程序导航的最佳选择。

我对这个项目表示乐观,因为 Facebook 的一些最有热情的人(特别是 Hector、Sophie 和 Ram)正在重构 React Native,并制定了很多明智的计划,解决了一些最重要的问题。

我认为 React Native 正处在一个很好的位置,其中的一个原因是微软在新版本的 Office 中使用了 React Native(https://twitter.com/TheLarkInn/status/1006746626617008128)。

从宏观角度来看,使用像 JavaScript 这样的脚本语言来开发移动应用程序几乎是不可避免的,因为使用 Swift/Objective-C/Java/Kotlin 这些语言来开发 UI 效率太差。此外,每个应用程序都要开发两次(或者如果算上 Web 就是三次),这根本就是个大麻烦。无论是 React Native、Flutter 还是其他羽翼未满的新产品,它们也都大致如此。就我个人而言,我对获胜者的机会猜测如下:React Native 55%、Flutter 15%,其他我们还看不到的 30%。

  原文链接

https://blog.expo.io/should-we-use-react-native-1465d8b607ac