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

Vue3中watchEffect的用途淺析

 更新時間:2021年07月05日 14:34:22   作者:李孤雛  
這篇文章主要給大家介紹了關(guān)于Vue3中watchEffect用途的相關(guān)資料, watch和watchEffect都是監(jiān)聽器,但在寫法和使用上有所區(qū)別,本文進(jìn)行了詳細(xì)的介紹,需要的朋友可以參考下

前言

vue2里面的 watch api 大家應(yīng)該都挺熟悉的了, vue2中vue實例里面有一個 $watch 方法 在sfc(sigle file component)里面有一個 watch 選項。他可以實現(xiàn)在一個屬性變更的時候,去執(zhí)行我們想要的行為。比如:

  • 當(dāng)ID改變的時候,從數(shù)據(jù)庫里面獲取新的數(shù)據(jù)。
  • 當(dāng)屬性變換的時候執(zhí)行一個動畫。
  • 當(dāng)搜索條件變更的時候,更新查詢到的數(shù)據(jù)。

但是 vue3 除了 watch api, 還新增了一個 watchEffect 的 api, 我們來看看他的用法。

我們收集了一個 userID 的依賴,然后在 userID 改變的時候,就會執(zhí)行watchEffect 的回調(diào)。

// 例子靈感來源于[文檔](https://v3.vuejs.org/api/computed-watch-api.html#watcheffect)

import { watchEffect, ref } from 'vue'
setup () {
    const userID = ref(0)
    watchEffect(() => console.log(userID))
    setTimeout(() => {
      userID.value = 1
    }, 1000)

    /*
      * LOG
      * 0 
      * 1
    */

    return {
      userID
    }
 }

與 watch 有什么不同?

  • 第一點(diǎn)我們可以從示例代碼中看到 watchEffect 不需要指定監(jiān)聽的屬性,他會自動的收集依賴, 只要我們回調(diào)中引用到了 響應(yīng)式的屬性, 那么當(dāng)這些屬性變更的時候,這個回調(diào)都會執(zhí)行,而 watch 只能監(jiān)聽指定的屬性而做出變更(v3開始可以同時指定多個)。
  • 第二點(diǎn)就是 watch 可以獲取到新值與舊值(更新前的值),而 watchEffect 是拿不到的。
  • 第三點(diǎn)是 watchEffect 如果存在的話,在組件初始化的時候就會執(zhí)行一次用以收集依賴(與computed同理),而后收集到的依賴發(fā)生變化,這個回調(diào)才會再次執(zhí)行,而 watch 不需要,因為他一開始就指定了依賴。

從他們的不同點(diǎn)可以看出,他們的優(yōu)缺點(diǎn)。并且可以在業(yè)務(wù)需求面前做出正確的選擇。

watchEffect 進(jìn)階

停止監(jiān)聽

watchEffect 會返回一個用于停止這個監(jiān)聽的函數(shù),如法如下:

const stop = watchEffect(() => {
  /* ... */
})

// later
stop()

例子來源于官方文檔, 上面有鏈接。

如果 watchEffect 是在 setup 或者 生命周期里面注冊的話,在組件取消掛載的時候會自動的停止掉。

使 side effect 無效

什么是 side effect ,不可預(yù)知的接口請求就是一個 side effect,假設(shè)我們現(xiàn)在用一個用戶ID去查詢用戶的詳情信息,然后我們監(jiān)聽了這個用戶ID, 當(dāng)用戶ID 改變的時候我們就會去發(fā)起一次請求,這很簡單,用watch 就可以做到。 但是如果在請求數(shù)據(jù)的過程中,我們的用戶ID發(fā)生了多次變化,那么我們就會發(fā)起多次請求,而最后一次返回的數(shù)據(jù)將會覆蓋掉我們之前返回的所有用戶詳情。這不僅會導(dǎo)致資源浪費(fèi),還無法保證 watch 回調(diào)執(zhí)行的順序。而使用 watchEffect 我們就可以做到。

onInvalidate()

onInvalidate(fn)傳入的回調(diào)會在 watchEffect 重新運(yùn)行或者 watchEffect 停止的時候執(zhí)行

watchEffect(() => {
      // 異步api調(diào)用,返回一個操作對象
      const apiCall = someAsyncMethod(props.userID)

      onInvalidate(() => {
        // 取消異步api的調(diào)用。
        apiCall.cancel()
      })
})

借助 onInvalidate 我們就可以對上面所述的情況作出比較優(yōu)雅的優(yōu)化。

總結(jié)

到此這篇關(guān)于Vue3中watchEffect用途的文章就介紹到這了,更多相關(guān)Vue3 watchEffect用途內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過debug搞清楚.vue文件如何變成.js文件(案例詳解)

    通過debug搞清楚.vue文件如何變成.js文件(案例詳解)

    這篇文章主要介紹了通過debug搞清楚.vue文件如何變成.js文件,本文以@vitejs/plugin-vue舉例,通過debug的方式帶你一步一步的搞清楚vue文件是如何編譯為js文件的,需要的朋友可以參考下
    2024-07-07
  • element ui 表格動態(tài)列顯示空白bug 修復(fù)方法

    element ui 表格動態(tài)列顯示空白bug 修復(fù)方法

    今天小編就為大家分享一篇element ui 表格動態(tài)列顯示空白bug 修復(fù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • element-plus日歷(Calendar)動態(tài)渲染以及避坑指南

    element-plus日歷(Calendar)動態(tài)渲染以及避坑指南

    這篇文章主要給大家介紹了關(guān)于element-plus日歷(Calendar)動態(tài)渲染以及避坑指南的相關(guān)資料,這是最近幫一個后端朋友處理一個前端問題,elementUI中calendar日歷組件內(nèi)容進(jìn)行自定義顯示,實現(xiàn)類似通知事項的日歷效果,需要的朋友可以參考下
    2023-08-08
  • 詳解Vue組件之間的數(shù)據(jù)通信實例

    詳解Vue組件之間的數(shù)據(jù)通信實例

    本篇文章主要介紹了詳解Vue組件之間的數(shù)據(jù)通信實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 前端vue+element使用SM4國密加密解密的詳細(xì)實例

    前端vue+element使用SM4國密加密解密的詳細(xì)實例

    國密即國家密碼局認(rèn)定的國產(chǎn)密碼算法,主要有SM1,SM2,SM3,SM4,下面這篇文章主要給大家介紹了關(guān)于前端vue+element使用SM4國密加密解密的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 解決vue-cli + webpack 新建項目出錯的問題

    解決vue-cli + webpack 新建項目出錯的問題

    下面小編就為大家分享一篇解決vue-cli + webpack 新建項目出錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 在Vue當(dāng)中同時配置多個路由文件的方法案例代碼

    在Vue當(dāng)中同時配置多個路由文件的方法案例代碼

    這篇文章主要介紹了在Vue當(dāng)中同時配置多個路由文件的方法,包含具體代碼,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Vue如何在CSS中使用data定義的數(shù)據(jù)淺析

    Vue如何在CSS中使用data定義的數(shù)據(jù)淺析

    這篇文章主要給大家介紹了關(guān)于Vue如何在CSS中使用data定義的數(shù)據(jù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-05-05
  • 利用Vue-draggable組件實現(xiàn)Vue項目中表格內(nèi)容的拖拽排序

    利用Vue-draggable組件實現(xiàn)Vue項目中表格內(nèi)容的拖拽排序

    這篇文章主要介紹了利用Vue-draggable組件實現(xiàn)Vue項目中表格內(nèi)容的拖拽排序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 封裝一下vue中的axios示例代碼詳解

    封裝一下vue中的axios示例代碼詳解

    這篇文章主要介紹了封裝一下vue中的axios,本文通過示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論

湄潭县| 镶黄旗| 华池县| 莱芜市| 栾川县| 二连浩特市| 汉源县| 禹城市| 天水市| 资兴市| 石景山区| 宜昌市| 镇沅| 昂仁县| 繁昌县| 田林县| 六盘水市| 灵璧县| 武宁县| 甘孜县| 中阳县| 桦甸市| 陈巴尔虎旗| 广东省| 通山县| 鄂伦春自治旗| 大渡口区| 花莲县| 寻甸| 贵德县| 大荔县| 东莞市| 昌图县| 定日县| 郯城县| 曲周县| 中山市| 广西| 大方县| 长子县| 安宁市|