凌晨2點,Dan
仍坐在電腦桌前,表情嚴肅。
作為React
社群最知名的佈道者,此時正遭遇一場不小的變故 —— 他擁有38w粉絲的推特賬號被影子封禁了。
所謂影子封禁,是指粉絲無法在流中刷到被封禁者的任何推文,只能點進被封禁者的賬號才能看到新推文
在RSC
(React Server Component)特性發布後,Dan
經常用這個賬號科普各種RSC
知識。這次封禁,顯然對他的佈道事業造成不小打擊,不得已只能啟用新賬號。
雖然新賬號粉絲不多,但值得寬慰的是 —— 這篇題為The Two Reacts的RSC佈道文
資料還不錯。
這篇文章透過解釋世界上存在2個React
:
- 在客戶端執行的
React
,遵循UI = f(state)
,其中state
是狀態,是可變的 - 在服務端執行的
React
,遵循UI = f(data)
,其中data
是資料來源,是不變的
來論證RSC
的必要性(他為服務端執行的React
提供了底層技術支援)。
安靜的夜總是讓人思緒良多,Dan
合上MacBook Pro
,回想起當年參加行業會議,在會議開始前一週才實現演講所需的Demo
(也就是Redux
的雛形)。也正是以這次參會為契機,他才得以加入Meta倫敦
,進入React核心團隊
。
隨後,Dan
又回想起在React Conf 2018
介紹Hook
特性時,臺下觀眾驚喜的歡呼。
想到這裡,不禁又感嘆 —— 曾經並肩戰鬥的戰友們都已各奔東西。
Redux
的聯合作者Andrew Clark
離開了(入職Vercel
),Hook
的作者sebastian markbåge
也離開了(入職Vercel
),連自己最終也離開了(入職bluesky
)。
雖然React
仍是前端領域最熱門的框架,但一些微妙的東西似乎在慢慢變化,是什麼變了呢?
免費領取卡頌原創React教程(原價359)、加入人類高質量前端群
React正迎來自己口碑的拐點
作為一款11歲高齡的前端框架,React
正迎來自己口碑的拐點。
近期,有多名包括知名庫作者、React18工作組
成員在內的社群核心使用者公開表達了對React
的批評,比如:
- Increasingly miffed about the state of React
- Kind of annoyed at React
- React, where are you going?
- The decline of React
- Concatenating text
有人會說,React
從誕生伊始至今從不乏批評的聲音,有什麼大驚小怪的?
這其中的區別其實非常大。從React
誕生伊始至今,批評通常是開發者與React核心團隊
的理念之爭,比如:
JSX
到底好不好用?這是理念之爭- 用
Class Component
還是Function Component
?這是理念之爭 - 要不要使用
Signal
技術?這還是理念之爭
雖然開源專案都很重視開發者的反饋,但React
已經不能算是普通開源專案,而是一個龐大的技術生態。
在這個生態中,開發者的不滿實際上並不會動搖React
的基本盤。因為決定開發者是否在專案中使用React的,並不是開發者自身好惡,而是公司考量技術生態後作出的自上而下的選擇。
所以,React
的基本盤是技術生態(而非開發者)。而構成技術生態的,則是生態中大大小小的開源作者/開源團隊。
這一輪對React
的批評,多是核心技術生態的參與者發出的,他們才是支撐React
大廈的一根根柱子。
批評的主要原因是 —— React團隊
將React
的發展與一家商業公司(Vercel
)牢牢繫結。
這對於React核心團隊成員
來說,是從大廠到獨角獸的個人職場躍遷。但對廣大React技術生態
的開源作者/開源團隊來說,則是被動與一家商業公司(Vercel
)繫結。
舉個例子,RSC
中有個叫Server Actions
的特性,用於簡化在服務端處理前端互動的流程。Vercel
是一家雲服務公司,旗下的Next.js
支援Server Actions
可以完美契合自家Serverless
服務的場景。
但其他開源專案可能並不會從這個特性中受益。
再比如,React Bricks
的作者曾抱怨 —— 雖然表面上看,React
可以與Vite
結合,可以與React Router
結合(也就是Remix
的前身),一切都是自由的選擇。但上層的服務商表示:如果React Bricks
不能支援Next.js
,就不會再使用他。
換句話說,React
在逐漸將自己的技術生態遷移到Next.js
,而技術生態是公司技術選型的首要考慮因素。如果開源庫不主動融入Next生態
,公司在做技術選型時可能就不會考慮這個庫。
迫於市場的考量,會有很多原React生態
下的庫遷移到Next生態
,即使這麼做並非庫作者意願(畢竟Next.js
的背後是一家商業公司)。
框架作者的反抗
如果說一般的開源庫只能被動選擇是否追隨Next生態
,那還有一類開源庫選擇與Next.js
正面對抗,這就是Meta Framework
(元框架)。
所謂元框架,是指基於前端框架封裝的功能更全的上層框架,比如:
- 框架
Vue
,元框架Nuxt.js
- 框架
React
,元框架Remix
、Next.js
- 框架
Solid.js
,元框架SolidStart
- 框架
Svelte
,元框架SvelteKit
還有些框架本身就是元框架,比如Angular
、Astro
。
從NPM年下載量
看,Next.js
對這些競品基本呈碾壓之勢(下表綠色是Next
):
造成當前局面有多少是因為Next.js相比其他元框架表現更出色我們不得而知,但有一點可以肯定 —— React生態
向Next生態
的遷徙對形成當前局面一定貢獻了不少。
參考下圖,黃色(React
年下載量)對綠色(Next
年下載量)的提攜:
元框架的競爭已經逐漸白熱化,現在甚至出現了生成元框架的框架 —— vinxi。
你可以選擇框架(React
、Vue
、Solid
...),再選擇應用場景(客戶端、SSR
、SSG
...)以及一些個性化配置,vinxi
會為你生成一個獨屬於你的元框架。
順便一提,SolidStart
就是基於vinxi
構建的。
後記
對React將技術生態向Next遷移的不滿在社群已經醞釀已久,並在近期迎來了爆發。長久來看,這種不滿必將影響React
的根基 —— 技術生態。
但從上帝視角來看,沒有人是真正在意React
的:
- 開發者只在意是否能穩定、高效完成工作
- 開源作者只在意技術生態市場是否夠大(不能被少數公司壟斷)
React核心團隊成員
在意的是自己的職業前景- 元框架作者在意的是從
Next
無法顧及的細分場景切一塊蛋糕
React
就像一個被開採了11年的金礦,開採的各方都有所抱怨,同時又不停下手中揮舞的鐵鎬。
當React
將技術生態逐漸遷移到Next生態
後,React
的身影將只存在於一些細節中,比如:
Hook
的執行順序不能變- 嚴格模式下元件會
render
兩次 - 相比其他框架更低的效能
作為一家商業公司,未來Vercel
會不會為了市場考量逐漸最佳化這些特性(比如引入Signal
)?
如果說React
未來一定會消失,那他的死必不會像煙花那樣猝不及防而又燦爛(就像谷歌宣佈研發Angular2
後,Angular1
在關注度最高時迎來了他的死亡)。
更可能的情況是像忒修斯之船一樣,在航行的過程中不斷更換老舊的木條,最終在悄無聲息中逐漸消失......