Airbnb棄用之後,我們還應該用ReactNative嗎?
近日,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
相關文章
- Airbnb:ReactNative從選擇到放棄AIReact
- 我們應該測試 DAO 層嗎?
- 我們應該使用 TLS1.3 嗎TLS
- KUBERNETES棄用DOCKER後還能用Docker嗎? - CiullaDocker
- 系列好文 | Kubernetes 棄用 Docker,我們該何去何從?Docker
- 繼 Airbnb 之後,Udacity 也宣佈棄用 React Native!AIReact Native
- 生物識別技術:我們應該擔心嗎?
- 我們究竟應不應該使用框架?框架
- 工作四年,捨棄廣州30K的offer,我該後悔嗎?
- GitHub:我們為什麼會棄用jQuery?GithubjQuery
- 我們都應該學習PHPPHP
- 我們應該如何給需求排序?排序
- 學習Tomcat,我們應該懂的Tomcat
- 我應該使用 MongoDB 還是 PostgreSQL? - AmritMongoDBSQL
- 播個遊戲而已,我們應該向遊戲廠商繳稅嗎?遊戲
- [譯] 我們如何拋棄了 Redux 而選用 MobXRedux
- 雲伺服器1核和2核區別大嗎?我們應該該如何選擇?伺服器
- 對於Linux,我們應該學什麼?Linux
- 關於註解我們應該知道的
- CentOS停止維護後我們該怎麼辦?CentOS
- 我不應該用JWT的!JWT
- 當容器應用越發廣泛,我們又該如何監測容器?
- 我們應該如何選擇蘋果簽名?蘋果
- 面對變革,我們應該怎麼做?
- 2020 年,我們還玩得動 100 小時的 RPG 嗎?
- 找工作時,我們應該思考的幾件事情。
- 淺談AsyncLocal,我們應該知道的那些事兒
- 我們應對恆馳5抱有期待嗎?
- 我該用 Java 12 還是堅持 Java 11?Java
- 放棄Javascript-使用kotlin編寫react前端應用之todoListJavaScriptKotlinReact前端
- Airbnb: React Native 從選擇到放棄AIReact Native
- 【單頁應用】我們該如何處理框架彈出層層級關係?框架
- 50年過去了,我們還需要《龍與地下城》嗎?
- 認識一下,我們是應用社交「幕後大佬」 IM 家族
- 應該是最後一次創業了,我們就寫個日記吧 20221106創業
- 當我們在聊 Serverless 時你應該知道這些Server
- 2020年,為什麼我們應該使用abapGit代替SAPLinkGit
- 時到如今,我們應該如何評價《死亡擱淺》?