當(dāng)別人因為React、Vue吵起來時,我們應(yīng)該做什么
大家好,我卡頌。
最近尤大的一個推文引起了不小熱議,大概經(jīng)過是:
- 有人在推上夸React文檔寫的好,把可能的坑點都列出來
- 尤看到后批評道:框架應(yīng)該自己處理這些坑點,而不是把他們暴露給用戶
尤大在推上的發(fā)言一直比較耿直,這次又涉及到React這個老對手,關(guān)注度自然不低。
再加上國內(nèi)前端自媒體的一波引導(dǎo)發(fā)酵,比如知乎下這個話題相關(guān)的問題中的措辭是「怒噴」,懂得都懂。
在這樣氛圍與二手信源的影響下,會給人一種「大佬都親手下場撕了」的感覺,自然會引來React、Vue各自擁躉的一番激烈討論。
年年都是一樣的套路,毫無新意......
面對這樣的爭吵,我們應(yīng)該做什么呢?
首先,回到源頭本身,尤大diss的有道理么?有。
React的心智負擔(dān)重么?確實重。比如useEffec這個API,你能想象文檔中一個章節(jié)居然有6篇文章是教你如何正確使用useEffec的么?
造成這一現(xiàn)象的原因有很多,比如:
- Hooks的實現(xiàn)原理使得必須顯式聲明依賴。
- 顯式聲明依賴無法覆蓋useEffect所有場景,為此專門提出一個叫Effect Event的概念,以及一個對應(yīng)的新hook —— useEffectEvent。
- useEffect承載了太多功能,比如未來Offscreen的顯隱回調(diào)(類似Vue中的Keep-Alive)也是通過useEffect實現(xiàn)。
當(dāng)我們繼續(xù)往前回溯,「Hooks必須顯式聲明依賴」是「React更新機制」決定的,而「React更新機制」又是React實現(xiàn)原理的核心。
本質(zhì)來說,還是React既往的成功、龐大的社區(qū)生態(tài)讓他積重難返,無法從底層重寫。
這是歷史必然的進程,如果Vue所有新特性都在Vue2基礎(chǔ)上迭代(而不是完全重寫的Vue3),我相信也是同樣的局面。
所以,當(dāng)前React的迭代方向是 —— 支持上層框架(比如Next.js、Remix),寄希望于靠這些框架的封裝能力彌補React自身心智負擔(dān)重的缺點。這個策略顯然也是成功的。
回到這次爭吵本身,尤大不知道React文檔為什么要花大篇幅幫開發(fā)者避坑(以及背后反映的積重難返)么?他顯然是知道的。
他如此回復(fù)是因為他所處的位置是「框架作者」,React是他的競爭對手。設(shè)想一下,如果你的競爭對手在一些方面確實不如你,但他的用戶對此的反應(yīng)不是“太難用了,我要換個好用的”,而是“一定是我用的姿勢不對,你快出個文檔好好教教我”
面對這樣的用戶,換誰都得有一肚子牢騷吧~
讓我們再把視角轉(zhuǎn)到「React的用戶」(也就是我們這些普通開發(fā)者)上。我們?yōu)槭裁催x擇React呢?
可能有些人是處于喜好。但大部分開發(fā)者之所以用React,完全是因為公司要求用React。
用React的公司多,招React的崗位多,自然選擇React的開發(fā)者就多了。
那么為什么用React的公司多呢?這顯然是多年前React在先發(fā)優(yōu)勢、社區(qū)生態(tài)兩場戰(zhàn)役取勝后得到的結(jié)果。
總結(jié)
所以,我們需要尊重兩個事實:
- React心智負擔(dān)重是事實。
- 用React的公司多也是事實。
兩者并不矛盾,他們都是歷史進程的產(chǎn)物。
Vue、React之間的討論,即使是從技術(shù)層面出發(fā),最后也容易陷入“React心智負擔(dān)這么重,你們還甘之如飴,你們React黨是不是傻”這樣的爭吵中。
這顯然就是忽略了歷史的進程。
正確的應(yīng)對方式是多關(guān)心關(guān)心自己未來的發(fā)展:
- 如果我的重心在海外,那應(yīng)該給Next.js更多關(guān)注。海外遠程團隊不是Next就是Nest。
- 如果我的重心在國內(nèi),國內(nèi)流量都被小程序分割了。一個長遠的增長點應(yīng)該是鴻蒙。