最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

useEffect理解React、Vue設(shè)計(jì)理念的不同

 更新時間:2022年09月20日 14:46:28   作者:魔術(shù)師卡頌  
這篇文章主要為大家介紹了useEffect理解React、Vue設(shè)計(jì)理念的不同詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

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

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

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

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

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

Vue與React的差異

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

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

componentDidMount

componentDidUpdate

componentWillUnmount

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

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

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

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

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

Hooks不能在條件語句中聲明

Hooks必須顯式指明依賴

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

useEffect會越來越復(fù)雜

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

但是,未來會有更多觸發(fā)時機(jī)與useEffect掛鉤。

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

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

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

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

比如,下述聊天室組件,其中的useEffect可以看作是針對聊天室連接的同步過程

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時,對應(yīng)的同步過程應(yīng)該進(jìn)行。

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

同理,如果React原生支持了Vue中的KeepAlive,那么當(dāng)聊天室組件從可見變?yōu)?strong>不可見,以及從不可見變?yōu)?strong>可見狀態(tài),同步過程都應(yīng)該進(jìn)行。

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

但是,如果從生命周期函數(shù)的角度看待useEffect,等未來(可能是v18的某個版本),Offscreen Component特性落地(對標(biāo)Vue中的KeepAlive),組件從可見變?yōu)?strong>不可見狀態(tài)時,useEffect銷毀函數(shù)useEffect回調(diào)函數(shù)會依次執(zhí)行,就會讓人很頭大。

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

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

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

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

總結(jié)

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

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

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

這里的前端新手,可能是想入行前端的新人,也可能是覺得前端我也能干的后端。

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

以上就是useEffect理解React、Vue設(shè)計(jì)理念的不同的詳細(xì)內(nèi)容,更多關(guān)于useEffect React Vue設(shè)計(jì)理念的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的方法

    element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的方法

    最近項(xiàng)目中需要用到日期選擇器,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于element中datepicker日期選擇器選擇周一到周日并實(shí)現(xiàn)上一周和下一周的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • vue+高德地圖寫地圖選址組件的方法

    vue+高德地圖寫地圖選址組件的方法

    這篇文章主要介紹了vue+高德地圖寫地圖選址組件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Vue源碼之rollup環(huán)境搭建步驟詳解

    Vue源碼之rollup環(huán)境搭建步驟詳解

    這篇文章主要介紹了Vue源碼之rollup環(huán)境搭建步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 淺談一下Vue技術(shù)棧之生命周期

    淺談一下Vue技術(shù)棧之生命周期

    這篇文章主要介紹了淺談一下Vue技術(shù)棧之生命周期,每一個vue實(shí)例從創(chuàng)建到銷毀的過程,就是這個vue實(shí)例的生命周期,這些過程中會伴隨著一些函數(shù)的自調(diào)用,需要的朋友可以參考下
    2023-05-05
  • vue2?對全局自定義指令一次性進(jìn)行注冊的方法

    vue2?對全局自定義指令一次性進(jìn)行注冊的方法

    這篇文章主要介紹了vue2?對全局自定義指令一次性進(jìn)行注冊,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Vue實(shí)現(xiàn)簡易跑馬燈效果

    Vue實(shí)現(xiàn)簡易跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡易跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Vue 中使用富文本編譯器wangEditor3的方法

    Vue 中使用富文本編譯器wangEditor3的方法

    這篇文章主要介紹了Vue 中使用富文本編譯器wangEditor3的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Vue實(shí)現(xiàn)登錄功能全套超詳細(xì)講解(含封裝axios)

    Vue實(shí)現(xiàn)登錄功能全套超詳細(xì)講解(含封裝axios)

    這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)登錄功能(含封裝axios)的相關(guān)資料,Vue是現(xiàn)在前端最流行的框架之一,作為前端開發(fā)人員應(yīng)該要熟練的掌握它,需要的朋友可以參考下
    2023-10-10
  • vue+elementUI多表單同時提交及表單校驗(yàn)最新解決方案

    vue+elementUI多表單同時提交及表單校驗(yàn)最新解決方案

    假設(shè)有一個頁面,需要分三步填寫三個表單,且每個表單位于獨(dú)立的組件中,然后最后保存同時提交,如何進(jìn)行表單必填項(xiàng)校驗(yàn),下面小編給大家介紹vue+elementUI多表單同時提交及表單校驗(yàn)最新解決方案,感興趣的朋友一起看看吧
    2024-03-03
  • Vue.js組件tree實(shí)現(xiàn)省市多級聯(lián)動

    Vue.js組件tree實(shí)現(xiàn)省市多級聯(lián)動

    這篇文章主要為大家詳細(xì)介紹了Vue.js組件tree實(shí)現(xiàn)省市多級聯(lián)動的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

佛学| 衡阳市| 沈阳市| 高密市| 旌德县| 广饶县| 浏阳市| 安国市| 南召县| 临江市| 阳西县| 长沙市| 安龙县| 舞阳县| 阿坝县| 宁南县| 沈丘县| 松溪县| 上虞市| 修水县| 台北县| 墨玉县| 榆中县| 临潭县| 阿克| 沅江市| 舒兰市| 文山县| 西昌市| 饶平县| 安顺市| 麦盖提县| 平和县| 天祝| 遂昌县| 鸡东县| 甘洛县| 神农架林区| 丹江口市| 繁昌县| 吉木乃县|