成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從UseEffect看React、Vue設(shè)計(jì)理念的不同

開(kāi)發(fā) 前端
React作為Facebook為探索「UI開(kāi)發(fā)」最佳實(shí)踐而生的框架,一貫的做法是 —— 保持API穩(wěn)定(比如this.setState從React誕生伊始就一直存在)。

大家好,我卡頌。

我們知道,React發(fā)布Hooks后,帶來(lái)了業(yè)界一波Hooks熱。很多框架(比如Vue Composition API、Solid.js)都借鑒了Hooks的模式。

但是,即使這些框架都借鑒了Hooks,但由于框架作者的理念不同,發(fā)展方向也逐漸不同。

比如,在Vue Composition API中,對(duì)標(biāo)React useEffect API的是watchEffect,在Vue文檔中,有一小段內(nèi)容介紹他的用法:

圖片

而在React beta文檔中,介紹useEffect的,則有整整6節(jié)內(nèi)容:

圖片

為什么會(huì)有這樣的區(qū)別?讓我們從useEffect看看React、Vue設(shè)計(jì)理念的不同。

Vue與React的差異

當(dāng)Hooks剛問(wèn)世時(shí),他被看作是類組件的替代方案。文檔中介紹Hooks時(shí)也是將他與類組件對(duì)比。

其中useEffect的執(zhí)行時(shí)機(jī)囊括了如下3個(gè)生命周期函數(shù):

  • componentDidMount
  • componentDidUpdate
  • componentWillUnmount

圖片

反觀借鑒了Hooks的Vue Composition API,則同時(shí)提供了watchEffect API與不同場(chǎng)景的生命周期函數(shù)。

圖片

這里已經(jīng)體現(xiàn)出兩者設(shè)計(jì)理念的不同了:

React?作為Facebook?為探索「UI開(kāi)發(fā)」最佳實(shí)踐而生的框架,一貫的做法是 —— 保持API?穩(wěn)定(比如this.setState?從React誕生伊始就一直存在)。

而Vue?則借鑒了各種框架中的最佳實(shí)踐(比如虛擬DOM?、響應(yīng)式更新...)。

所以,從易用性上來(lái)說(shuō),Vue Composition API?是一定優(yōu)于React Hooks的,比如:

  • Hooks不能在條件語(yǔ)句中聲明。
  • Hooks必須顯式指明依賴。

并且,這種易用性的差異會(huì)隨著框架迭代,愈發(fā)明顯。

useEffect會(huì)越來(lái)越復(fù)雜

本著「保持API穩(wěn)定」的原則,當(dāng)前useEffect主要與上述三個(gè)生命周期函數(shù)相關(guān)。

但是,未來(lái)會(huì)有更多觸發(fā)時(shí)機(jī)與useEffect掛鉤。

所以,React?團(tuán)隊(duì)在努力做一件事 —— 淡化useEffect?與生命周期的關(guān)系,甚至淡化useEffect與組件的關(guān)系(因?yàn)楫?dāng)談到組件時(shí),很自然的會(huì)想到組件生命周期)。

怎么淡化呢?答案是 —— 在嚴(yán)格模式下,DEV?環(huán)境會(huì)觸發(fā)多次useEffect回調(diào)。

如果你將useEffect?當(dāng)作componentDidMount/WillUnmount?來(lái)用,這個(gè)特性很可能讓你的代碼出bug。

React?團(tuán)隊(duì)之所以這么做,就是想教育開(kāi)發(fā)者 —— useEffect?和生命周期沒(méi)有關(guān)系。開(kāi)發(fā)者應(yīng)該將useEffect看作「針對(duì)某個(gè)數(shù)據(jù)源的同步過(guò)程」。

比如,下述聊天室組件,其中的useEffect可以看作是「針對(duì)聊天室連接的同步過(guò)程」:

const serverUrl = 'https://localhost:1234';
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.connect();
return () => {
connection.disconnect();
};
}, [roomId]);
// ...
}

當(dāng)聊天室組件mount、update、unmount時(shí),對(duì)應(yīng)的同步過(guò)程應(yīng)該進(jìn)行。

當(dāng)roomId變化時(shí),對(duì)應(yīng)的同步過(guò)程應(yīng)該進(jìn)行。

同理,如果React?原生支持了Vue?中的KeepAlive,那么當(dāng)聊天室組件從「可見(jiàn)」變?yōu)椤覆豢梢?jiàn)」,以及從「不可見(jiàn)」變?yōu)椤缚梢?jiàn)」?fàn)顟B(tài),同步過(guò)程都應(yīng)該進(jìn)行。

所以,當(dāng)我們從「同步過(guò)程應(yīng)該何時(shí)進(jìn)行」的角度看待useEffect?時(shí),上述useEffect觸發(fā)時(shí)機(jī)都是合理的。

但是,如果從生命周期函數(shù)的角度看待useEffect?,等未來(lái)(可能是v18的某個(gè)版本),Offscreen Component?特性落地(對(duì)標(biāo)Vue?中的KeepAlive?),組件從「可見(jiàn)」變?yōu)椤覆豢梢?jiàn)」?fàn)顟B(tài)時(shí),useEffect銷毀函數(shù)?與useEffect回調(diào)函數(shù)會(huì)依次執(zhí)行,就會(huì)讓人很頭大。

這就是為什么,我上文說(shuō),React?團(tuán)隊(duì)一直在淡化useEffect?與生命周期的關(guān)系,甚至淡化useEffect與組件的關(guān)系。

一切都是為了「未來(lái)其他特性與useEffect的掛鉤」打下理論基礎(chǔ)。而這些特性從「組件」或「生命周期函數(shù)」的角度講不通。

這也是為什么在新文檔里有6節(jié)內(nèi)容與useEffect相關(guān)的原因。

作為對(duì)比,Vue?在遇到新的場(chǎng)景時(shí)會(huì)怎么做呢?顯然是設(shè)計(jì)新的API。

總結(jié)

到底是提供一個(gè)API?,但是能覆蓋更多場(chǎng)景(文檔有6節(jié)來(lái)介紹他)好,還是每個(gè)場(chǎng)景都提供一個(gè)API好?

不同開(kāi)發(fā)者有自己的答案。

但有一點(diǎn)很明確,對(duì)于前端新手,React?的上手難度會(huì)越來(lái)越高,而Vue的上手難度會(huì)盡可能保持平滑。

這里的前端新手,可能是想入行前端的新人,也可能是覺(jué)得「前端我也能干」的后端。

所以,對(duì)于當(dāng)前的從業(yè)者來(lái)說(shuō),這究竟是好事還是壞事呢?

責(zé)任編輯:姜華 來(lái)源: 魔術(shù)師卡頌
相關(guān)推薦

2023-06-15 10:53:57

2019-02-18 14:42:18

React.jsUI前端

2022-09-23 10:25:00

VueReact

2022-08-21 09:41:42

ReactVue3前端

2019-04-28 16:10:50

設(shè)計(jì)Redux前端

2021-04-01 08:05:01

React無(wú)限循環(huán)useEffect()

2011-09-05 10:18:21

Windows 8Mac OS

2022-03-16 09:17:41

函數(shù)useStaterender

2023-11-26 18:02:00

ReactDOM

2023-12-25 15:40:55

React開(kāi)發(fā)

2021-03-10 08:20:54

設(shè)計(jì)模式OkHttp

2021-08-27 12:59:59

React前端命令

2024-01-23 09:51:11

編程工具

2013-06-07 11:31:36

面向?qū)ο?/a>設(shè)計(jì)模式

2025-05-12 01:33:00

異步函數(shù)Promise

2014-04-24 11:49:42

DevOps自動(dòng)化

2009-07-15 15:47:12

JDBC DAO

2021-10-12 08:34:23

React組件前端

2010-03-02 16:34:06

Android平臺(tái)

2018-06-26 10:59:31

虛擬化云計(jì)算核心技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人小视频在线观看 | www.黄网 | 国产精品毛片久久久久久久 | 久久lu| 久久黄色 | 国产在线观看一区二区 | 亚洲成人一二区 | 韩日精品视频 | 国产一区| 欧美日韩在线精品 | 欧美a在线 | 日韩欧美国产精品一区二区 | 99精品观看 | 中文二区 | 羞羞的视频免费看 | 午夜爽爽爽男女免费观看影院 | 亚洲精品久久久久久宅男 | 天堂一区二区三区 | 一区二区三区中文字幕 | 国产精品欧美一区二区三区不卡 | 国产精品成人免费 | 日韩一区二区三区在线视频 | 日本电影免费完整观看 | 国产精品一区视频 | 中文字幕日本一区二区 | 国产福利视频网站 | 国产精品中文字幕在线观看 | 在线观看中文字幕av | 亚洲成人二区 | 久久久久久一区 | 国产美女在线看 | 日韩中文字幕视频在线观看 | 一级黄色淫片 | 精品久久久一区二区 | 欧美三级三级三级爽爽爽 | 久久国产精品91 | 精品久久久久久中文字幕 | 中文字幕 欧美 日韩 | 在线亚洲人成电影网站色www | 在线成人| 精品久久久一区二区 |