<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們知道,React
釋出Hooks
後,帶來了業界一波Hooks
熱。很多框架(比如Vue Composition API
、Solid.js
)都借鑑了Hooks
的模式。
但是,即使這些框架都借鑑了Hooks
,但由於框架作者的理念不同,發展方向也逐漸不同。
比如,在Vue Composition API
中,對標React useEffect API
的是watchEffect
,在Vue
檔案中,有一小段內容介紹他的用法:
而在React beta
檔案中,介紹useEffect
的,則有整整6節內容:
為什麼會有這樣的區別?讓我們從useEffect
看看React
、Vue
設計理念的不同。
當Hooks
剛問世時,他被看作是類元件的替代方案。檔案中介紹Hooks
時也是將他與類元件對比。
其中useEffect
的執行時機囊括瞭如下3個生命週期函數:
componentDidMount
componentDidUpdate
componentWillUnmount
反觀借鑑了Hooks
的Vue Composition API
,則同時提供了watchEffect API
與不同場景的生命週期函數。
這裡已經體現出兩者設計理念的不同了:
React
作為Facebook
為探索UI開發最佳實踐而生的框架,一貫的做法是 —— 保持API
穩定(比如this.setState
從React
誕生伊始就一直存在)。
而Vue
則借鑑了各種框架中的最佳實踐(比如虛擬DOM、響應式更新...)。
所以,從易用性上來說,Vue Composition API
是一定優於React Hooks
的,比如:
Hooks
不能在條件語句中宣告
Hooks
必須顯式指明依賴
並且,這種易用性的差異會隨著框架迭代,愈發明顯。
本著保持API穩定的原則,當前useEffect
主要與上述三個生命週期函數相關。
但是,未來會有更多觸發時機與useEffect
掛鉤。
所以,React
團隊在努力做一件事 —— 淡化useEffect
與生命週期的關係,甚至淡化useEffect
與元件的關係(因為當談到元件時,很自然的會想到元件生命週期)。
怎麼淡化呢?答案是 —— 在嚴格模式下,DEV
環境會觸發多次useEffect
回撥。
如果你將useEffect
當作componentDidMount/WillUnmount
來用,這個特性很可能讓你的程式碼出bug
。
React
團隊之所以這麼做,就是想教育開發者 —— useEffect
和生命週期沒有關係。開發者應該將useEffect
看作針對某個資料來源的同步過程。
比如,下述聊天室元件,其中的useEffect
可以看作是針對聊天室連線的同步過程:
const serverUrl = 'https://localhost:1234'; function ChatRoom({ roomId }) { useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.connect(); return () => { connection.disconnect(); }; }, [roomId]); // ... }
當聊天室元件mount
、update
、unmount
時,對應的同步過程應該進行。
當roomId
變化時,對應的同步過程應該進行。
同理,如果React
原生支援了Vue
中的KeepAlive
,那麼當聊天室元件從可見變為不可見,以及從不可見變為可見狀態,同步過程都應該進行。
所以,當我們從同步過程應該何時進行的角度看待useEffect
時,上述useEffect
觸發時機都是合理的。
但是,如果從生命週期函數的角度看待useEffect
,等未來(可能是v18的某個版本),Offscreen Component
特性落地(對標Vue
中的KeepAlive
),元件從可見變為不可見狀態時,useEffect銷燬函數
與useEffect回撥函數
會依次執行,就會讓人很頭大。
這就是為什麼,我上文說,React
團隊一直在淡化useEffect
與生命週期的關係,甚至淡化useEffect
與元件的關係。
一切都是為了未來其他特性與useEffect的掛鉤打下理論基礎。而這些特性從元件或生命週期函數的角度講不通。
這也是為什麼在新檔案裡有6節內容與useEffect
相關的原因。
作為對比,Vue
在遇到新的場景時會怎麼做呢?顯然是設計新的API
。
到底是提供一個API
,但是能覆蓋更多場景(檔案有6節來介紹他)好,還是每個場景都提供一個API
好?
不同開發者有自己的答案。
但有一點很明確,對於前端新手,React
的上手難度會越來越高,而Vue
的上手難度會盡可能保持平滑。
這裡的前端新手,可能是想入行前端的新人,也可能是覺得前端我也能幹的後端。
所以,對於當前的從業者來說,這究竟是好事還是壞事呢?
以上就是useEffect理解React、Vue設計理念的不同的詳細內容,更多關於useEffect React Vue設計理念的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45