React Native 開發者調查:開發者體驗有待提升

React Native 團隊最近進行了一項面向 React Native 開發者的調查,問題是:“React Native 有哪些東西是你不喜歡的”?絕大多數開發者都將開發者體驗(包括除錯)作為首要槽點。另外,社群服務和文件也是痛點。
React Native 團隊最近進行了一項面向 React Native 開發者的 調查 ,問題是:“React Native 有哪些東西是你不喜歡的”?絕大多數開發者都將開發者體驗(包括除錯)作為首要槽點。另外,社群服務和文件也是痛點。此外,很多開發者希望 React Native 的應用程式程式設計介面(API)能夠覆蓋到經常發生的用例,比如 SVG。一些開發者還指出,React Native 還要不遺餘力地實現承諾,即為開發類原生應用程式提供無縫、跨平臺的開發工具。
大多數參加問卷調查的開發者對升級時所做的大量工作和所花費的時間表示遺憾。Jan Hesters 解釋說:
從一個版本升級到另一個版本很困難,需要做很多工作。特別是當你落後了幾個版本,不得不手動從當前版本升級到最新版本。
開發者還指出除錯體驗太差了。例如,Sebastien Lorber 表示:
我不喜歡的一點是,我們通常很難找到發生異常的根本原因。Chrome 偵錯程式控制檯中的堆疊跟蹤通常指向 ExceptionManager,而不是原始位置,這導致除錯非常耗時。componentDidCatch 並不會帶來真正的幫助。
開發者還指出,工具有可能是 React Native 需要做出改進的另一個方面:熱過載並不總會有效,樣式表可能還有優化的餘地,一些工具會發出太多的警告或神祕的錯誤。過時的依賴項可能構成障礙,使用 Cocoa 需要做大量的工作。Tycho Tatitscheff 詳細地描述了這個問題:
Cocoapod 沒有得到很好的支援,升級時經常會出現故障。中斷非常常見,以至於 @orta 構建了一個外掛來自動修復 React Native 的問題:[)。
Cocoa 是蘋果的原生面向物件應用程式程式設計介面。CocoaPods 是 Swift 和 Objective-C Cocoa 專案的依賴項管理器。對於 iOS、tvOS 和 watchOS,也有一個類似的 API,叫作 Cocoa Touch。
一些 Windows 開發者對他們平臺上糟糕的開發者體驗表示失望。Attila Szeremi 說:
在這些平臺上,React Native 的開發者體驗是很糟糕的。檔案監視器似乎對檔案的變更不太敏感。最糟糕的是,熱過載通常只在前五次左右有效,然後就完全卡住了,我不得不一遍又一遍地重新啟動捆綁器。
一些開發者甚至建議用 Swift/Kotlin 替代 JavaScript 作為 React Native 開發語言。Ilja Daderko 列舉了這樣做的一些優點:
我確信這個問題會經常出現,並且我知道用這些語言重寫 React Native 應用程式所需要的工作量,但是我發現 Swift 和 Kotlin 對於熟悉 JavaScript 的人來說會更友好。由於 Swift/Kotlin 的學習曲線不像 ObjC/Java 那麼陡峭,這可能會帶來更多的 OSS 貢獻和使用 JS 開發的自定義原生模組。
開發者認為 React Native 團隊缺乏對社群的參與,這會導致 Github 上的問題響應時間變慢,並且無法對 PR 做出及時響應。這可能會阻礙開發者對 React Native 開源專案做出貢獻。事實上,一些開發者認為貢獻過程太過複雜了。一些開發者認為,對社群缺乏支援也造成了總體不確定性和對 React Native 未來缺乏信心。
在文件方面,開發者希望能夠獲得更多有關常見故障或已知問題的幫助資訊。開發者給出了一個具體的例子:
要知道如何正確配置 KeyboardAvoidingView 幾乎是不可能的,因為文件對何時使用什麼行為的描述非常模糊,也因為它在其他環境中的用法不一樣。
我覺得解決方案可能是提供更好的文件,或者採用類似於 response -native-keyboard-aware-scroll-view 的策略:
https://github.com/APSL/react-native-keyboard-aware-scroll-view
Van der Auwermeulen Grégoire 舉了另一個例子:
在 JS 執行緒中橋接 ReactJS 生命週期事件時通常會出現這樣的問題,因為與 Native 生命週期事件不一致。我們需要更多有關高階和橋接問題的文件。
雖然開發者知道已經有針對初學者的指南,但仍然需要針對庫開發者的特定文件,例如如何處理 React Native 中的高階或隱藏特性,或者如何度量和優化效能。
在 React Native 的 API 表面方面,一些開發者希望看到更多由第三方庫提供並已整合到核心的一些功能。例如 SVG 影象、導航、檢視回收、推送通知、相機、視訊、音訊、指紋、基於動作的介面。
其他開發者認為 React Native 無法為使用者提供類似於原生的開發體驗。啟動時間仍然是區分真正的原生應用程式和混合應用程式(如使用 React Native 開發的應用程式)的關鍵因素。還有一些人表示,React Native 也未能實現跨平臺的承諾。Adam Burdette 說:
Android 仍然是二等公民。很多問題只在 Android 上出現,但在 iOS 上卻執行良好,所以很多開發者在開發過程中總是忘了會在 Android 上出現問題。
例子:
{0 && <view>}會導致 Android 崩潰。任何非預期的錯誤值都會導致 Android 崩潰,而且不會出現錯誤螢幕。你必須確保返回的是一個布林值。iOS 在這方面處理得很好。而在 Android 上,你不能指定 flex 的屬性,否則應用程式會在切換 secureTextEntry 時會崩潰,這個問題已經存在多年了,我敢肯定還有很多其他的例子。但 Android 應該是未來開發的主要焦點,以便更好地支援跨平臺。</view>
React Native 開發者提到的小痛點與 UI 有關:樣式和樣式不一致、zIndex 不一致、自動滾動、倒排列表或影象維度。
本文內容的主要來源是一個 Github Issue ,在這個問題中,React Native 團隊邀請開發者列出與他們使用 React Native 經驗相關的抱怨清單。我們分析了 81 個答案,收集了 5486 個“贊”,並將其分為 6 個類別。這些類別按照喜歡程度的遞減順序排列:開發和除錯、社群投入、文件、API、效率、UI。
React Native 是一個使用 JavaScript 和 React 開發原生移動應用程式的框架。與 React 類似,開發者將使用者介面描述為元件樹。與 React(使用 React DOM 作為渲染器)不同,元件樹是使用移動裝置的原生 API 來渲染的。在 iOS 上,這意味著 Native 元件會通過真實的 UI Views 來渲染,而在 Android 上,它們通過原生 View 來渲染。JavaScript 層和 Native 層通過一個叫作 橋 的東西進行通訊。
針對移動平臺的開發者有一組可用的技術棧。應用程式通常分為三類:移動 Web 應用程式、混合應用程式和原生應用程式。原生應用程式是指使用相應的技術為特定的平臺開發的應用程式,並安裝在計算裝置上。Web 應用程式是使用 Web 技術開發的,可以通過瀏覽器在多個平臺上使用。混合應用程式結合了原生應用程式和 Web 應用程式的元素。它們通常是跨平臺的,同時使用獨立於目標裝置的自定義技術集進行開發。
用於混合應用程式開發的框架包括 React Native、Flutter、Xamarin 或 Iono,等等。
(本文章轉載自infoq, 如有侵權, 請聯絡作者刪除)