最近又看到有人在吵 React Native 跟 Flutter 哪個比較好,這話題真的是…每年都要來一次,跟經期一樣準時。😂
說真的,2025 年了,這兩個框架都已經非常成熟,各自有一大票死忠粉絲。一個是 Meta (前臉書) 在背後撐腰的老江湖,另一個是 Google 捧在手心上的當紅炸子雞。一個根植在廣大的 JavaScript 生態系,另一個用 Dart 和自繪引擎走出自己的路。所以,到底該學哪個?下個案子該用哪個?
今天不想跟你談那些虛無飄渺的 benchmark 跑分,我們來聊點實際的,從團隊、從專案、從錢的角度來看,到底該怎麼選。
一句話結論
我自己是覺得,這根本不是在選「技術上比較屌」的那個,而是在選「對你現在的團隊和未來規劃最有利」的那個。選錯了,再神的工具都會變成開發地獄。
所以,到底什麼情況該選誰?
與其聽我長篇大論,不如直接看這個表,我把我自己的判斷標準都放上去了。這不是什麼官方答案,比較像是我自己腦袋裡的決策樹吧。
| 考慮面向 | 選 React Native 的理由 🤔 | 選 Flutter 的理由 🚀 |
|---|---|---|
| 團隊現有技能 | 團隊裡一堆人都是寫 React 的前端?那幾乎不用想了,直接上啊,學習曲線超低,馬上就能開工。 | 團隊對學新東西不排斥,或者有 Java/Kotlin/Swift 背景。說真的,Dart 學起來比想像中快。 |
| 專案效能要求 | 一般的 CRUD 應用、內容展示型 App。老實說,現在手機性能都很好,RN 的那點效能損耗,90% 的 App 根本感覺不出來。 | 要做一堆酷炫的自訂動畫、高幀率的互動介面,或 App 裡有複雜的圖形運算。沒有那座「橋」,天生就跑得比較順。 |
| UI/UX 設計自由度 | 希望 App 看起來、用起來「就是那個平台的樣子」。RN 預設會去呼叫系統原生的 UI 元件,使用者會覺得很熟悉。 | 設計師有個超屌的設計稿,不想被 iOS 跟 Android 的原生 UI 限制住。Flutter 可以像素級還原設計,在所有平台都長得一模一樣。 |
| 生態系與第三方套件 | 遇到怪問題?NPM 上大概已經有 10 個套件可以解決了。社群超大,各種現成的解決方案,省時省力。 | 主流的功能(地圖、支付、相機)套件都很完整。但如果你需要某個很冷門的硬體支援…嗯,可能要自己手刻 Native Module。 |
| 未來跨平台野心 | 主要目標就是 iOS 和 Android 手機 App。雖然有社群支援桌面端,但…你知道的,就不是官方主力。 | 你心裡想的是「一次開發,全平台制霸」。手機、網頁、Windows、macOS、甚至電視跟車機… Flutter 的野心非常大。 |
React Native:老經驗的務實派
RN 混到現在快十年了,真的是身經百戰。它的核心思想很簡單:讓會寫 React 的前端工程師,可以用 JavaScript 去寫出能跑在手機上的原生 App。
最大的優勢就是那個龐大的 JavaScript/React 生態系。你需要什麼功能?上 npm 搜一下,八九不離十都有人做好了。這對於快速開發、迭代產品來說,真的是超大的利多。Hot Reloading 功能也讓開發體驗很流暢,改個 code 存檔,畫面馬上就更新,不用整個重跑一次。
不過呢,它的原罪,或者說天生的限制,就是那個所謂的 JavaScript 橋接器 (JS Bridge)。
簡單講,你的 JS code 沒辦法直接指揮手機畫 UI,它需要透過一個「橋」去跟手機的原生程式碼溝通,然後再由原生程式碼去呼叫真正的 UI 元件。這一來一往,中間就有溝通成本,有效能開銷。所以當你的 App 有大量複雜動畫、或是頻繁的 UI 更新時,就可能會感覺到卡卡的。
Flutter:追求極致的理想家
Flutter 就不一樣了,Google 當初在設計它的時候,目標就很明確:效能跟跨平台一致性。它用了一個比較冷門的語言叫 Dart 這個語言,但好處是它可以被直接編譯成原生的 ARM code,執行效率很高。
最關鍵的是,Flutter 不走「橋接」這條路。它自己帶了一套叫 Skia 的 2D 繪圖引擎——對,就是 Google Chrome 瀏覽器跟 Android 系統底層在用的那個——直接在手機螢幕上把所有 UI 元件「畫」出來。這代表兩件事:
- 效能超好:少了中間商賺差價,動畫跟轉場可以做到非常滑順。
- UI 高度一致:因為所有東西都是自己畫的,所以你的 App 在 iPhone、Android 手機、甚至未來在 Windows 電腦上,看起來都會是完完全全一樣的,設計師會愛死這點。
當然,代價就是要學新的東西。除了 Dart 語言,它整套「萬物皆 Widget」的思維模式也跟傳統前端開發不太一樣,需要一點時間轉換思路。啊對了,突然想到,很多人一開始會怕 Dart,覺得要學新語言很煩。老實說我一開始也這麼覺得,但後來發現它語法吸收了滿多現代語言的優點,像是 C#、TypeScript,寫起來其實蠻舒服的,而且有 sound null safety,可以避免掉一堆空指標的錯誤。
不只手機,Flutter 的野心是星辰大海
一開始大家覺得 Flutter 就是另一個做手機 App 的工具,但現在格局完全不一樣了。React Native 的目標很明確,就是做好 iOS 和 Android。雖然社群也有推出給 Windows 或 macOS 用的版本,但那畢竟不是官方的主力。
Flutter 就不一樣了,它的目標是「Write once, run anywhere」的終極版。同一份 Dart code,現在已經可以穩定地編譯到:
- iOS
- Android
- Web (網頁)
- Windows
- macOS
- Linux
這就很恐怖了。代表你的團隊只要維護一份程式碼,就能上架到所有主流平台。這對於新創公司或想快速驗證市場的產品來說,吸引力真的超大。當然,Web 端的支援還有些地方要加強,比如 SEO 就比較麻煩,但進步速度非常快。
來點在地的觀察:台灣的職缺市場怎麼看?
說到這個,我們來看看數據,這點跟全球的趨勢有點像又有點不一樣。根據 Stack Overflow 的開發者調查(2023年),React.js 依然是專業開發者中最常用的 Web 框架,這也讓 React Native 因為技術同源的關係,在北美市場保有很高的能見度。
不過呢,如果你現在打開台灣的求職網站,像是 104 或 CakeResume,去搜尋「React Native」和「Flutter」的職缺數量,你會發現一個有趣的現象。幾年前 RN 的職缺是壓倒性的多,但這兩年 Flutter 的職缺數量正在快速追上,甚至在一些新創或接案公司,你會看到他們更傾向找 Flutter 開發者。我自己猜測,這跟 Flutter 跨平台的成本優勢,還有它能快速打造漂亮 UI 的特性,很對台灣一些中小企業和新創的胃口有關。
所以,如果你是從就業角度來考慮,RN 在台灣依然是基本盤比較大的選擇,特別是如果要去已經有 React 技術棧的大公司。但如果想去新創闖蕩,或者看好未來桌面和 Web 端的整合趨勢,學 Flutter 的潛力絕對不容小覷。
常見的選擇錯誤
看了這麼多,還是很難選嗎?那我分享幾個我看過最常見的「選錯邊」的悲劇,也許可以幫你避開一些坑。
- 錯誤一:「因為 Flutter 比較新、效能比較好,所以我們一定要用!」
結果整個團隊都是 React 老手,沒人想學 Dart,光是環境設定跟基本排版就卡關一個月,專案進度大落後,老闆氣到臉綠。技術的優越性,在團隊無法發揮時,等於零。 - 錯誤二:「我們公司網站是 React 做的,所以 App 就用 RN 吧,這樣 code 可以共用。」
這是一個超大的誤解!React Native 跟 React (for web) 雖然語法很像,但它們用的元件完全不同(一個是 ``, ` `,一個是 ` `, ``)。邏輯可以共用 (比如 Redux/Zustand 的 state management),但 UI code 是不可能直接複製貼上的。不要有這種不切實際的幻想。- 錯誤三:「我們的 App 需要超屌的 UI,所以選 Flutter。」
結果設計師給的設計稿,根本就是 iOS 跟 Android 原生設計規範的完美翻版。這種情況下用 Flutter,就有點殺雞用牛刀了,你放棄了 RN 龐大的生態系和開發速度,結果只是為了做一個用 RN 也能輕鬆做出來的 UI。簡單說,做決定前,誠實地問自己和團隊:我們的強項在哪?這個專案最重視的是什麼?是上市速度?是極致效能?還是未來的擴充性?想清楚這個,答案通常就呼之欲出了。
所以,如果是你,下一個 project 你會選哪個?還是你有用過哪一個,有什麼想吐槽或分享的血淚史?在下面留言聊聊吧!
- 錯誤三:「我們的 App 需要超屌的 UI,所以選 Flutter。」
