Airbnb棄用之後,我們還應該用ReactNative嗎?

雲棲直播~發表於2018-07-11

近日,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

原文釋出時間為:2018年06月26日
原文作者:掘金
本文來源:掘金 如需轉載請聯絡原作者


相關文章