最近開始接觸一些 Flutter 的東西,略有些小心得:
Lib 社群狀況
在 Flutter 社群的活躍度低於 React Native,不論簡單或困難的 PR ,常常擱置個半年甚至一年還沒合併,逼不得直接 fork 出一個先來自己維護。
可以參考 https://github.com/flutter/plugins,其中很常使用的 Google Map 或是 WebView 都有一些問題。
語言方面
JavaScript 跟 Dart 相比有許多類似之處,例如:都是單執行緒的語言、event loop 概念差不多、await/async 用法一樣、Dart 的 Future 等於 JavaScript 的 Promise等等。
當然,也有差很多的情況,Dart 是強型別語言,對於寫 Android 原生的朋友就友善多了,如果是純 JavaScript 開發者轉移過來可能就要熟悉一下 OOP。
開發過程
Flutter Widget 與 React Component 概念是一樣的( Stateful/StateLess),因為是樹狀結構,所以皆是推崇 Parent 去管理 Children 的狀態為主。
不過 Flutter 的渲染機制,開發者的可控制度較低,舉例來說, React Component 中的生命週期 ShouldComponentUpdate 可以用來自行控制是否要觸發 Render 該 Component。而 Flutter 是藉由內部的渲染機制 Element Tree 去做判斷是否重新 Build,開發者無法正當去控制。
在狀態管理上,React 目前主流的 Redux、React Context API+ React Hook、MobX 等等。Flutter 除了 Redux、MobX、還多了 BLoC 等其他模式。
Flutter 從安裝到開發皆非常順暢。而 React Native 不論是在安裝、開發皆會遇到大大小小的問題(恩…可能是我知識不足)。
未來趨勢
兩者皆可以跨個平台(網頁、手機、桌面應用),不過目前 React 在網頁端使用者較多,Flutter Web 使用者少。
Google 旗下的 Flutter 在去年剛推出第一版本,已經有許多 Android、iOS 原生的開發者開始學習了,因為都是物件導向語言,所以從 Native 跳轉到 Flutter 比較親切。從官網文檔以及各式 Flutter Weekly 的影片來看,Google 是下了很多功夫去推這項技術。
而 React Native,目前仍在 0.61 版本,在 2018 6月有發篇 state-of-react-native-2018,說因為 bridge 的設計不良所造成一些根本上的問題,所以目前仍在重新架構中,現在 2019 尾了,恩…加油!不過 React Native 因為廣大的 JS、React 愛好者,社群活躍度極高,社群大代表能找到的資源也就越多,一些不知名的 Bug 出現的機率也越小。
該選擇哪個?
以公司角度來看,如果團隊比較多人熟悉 React 那麼首選當然是 React Native。
如果單純想專精 Native 手機的開發者,可以從 Flutter 去下手,如果想跨網頁的話學習 React Native 其實也是不錯選擇。
總而言之,目前都有一定程度的支持者,取決於你想要什麼,以及團隊適合什麼。