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