欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3中的watch使用實戰(zhàn)案例

 更新時間:2025年10月21日 09:40:43   作者:歐陽天風(fēng)  
Vue3的watch功能是Vue生態(tài)系統(tǒng)中一個強大的工具,可以幫助開發(fā)者監(jiān)視數(shù)據(jù)的變化并執(zhí)行相應(yīng)的操作,這篇文章主要介紹了vue3中watch使用的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

前段時間看了一些直播關(guān)于vue3中的watch的使用,有許多看起來比較難以理解東西,今天就舉幾個例子看看兄弟們watch的實際掌握情況

二、案例

tips 以下除開特殊說明,修改的內(nèi)容都是setTimeout里面的賦值操作

1.案例1

<script setup lang="ts">
import { watch, ref } from "vue";
let obj: any = ref({ a: 1, b: { c: 1 } });
watch(
  obj,
  (newVal, oldVal) => {
    console.log(newVal, oldVal);
  },
  { deep: true }
);
setTimeout(() => {
 obj = { a: 2 }
  console.log("修改數(shù)據(jù)");
}, 1000);
</script>

<template></template>

<style scoped>
.read-the-docs {
  color: #888;
}
</style>

這一種相信大家可能比較清楚,肯定是不會觸發(fā)watch的執(zhí)行

2.案例2

修改賦值操作為 obj.value = { a: 2 } 結(jié)果是會觸發(fā)watch的執(zhí)行

為什么呢:因為在源碼當(dāng)中watch如果第一個參數(shù)是ref,那么源碼會將其轉(zhuǎn)換成
getter = () => source.value; 即watch判斷的是ref.value有沒有發(fā)生變化,很明顯,這個案例是發(fā)生了變化,所以watch會執(zhí)行

3.案例3

修改賦值操作為 obj.value.a = 2 這個會不會呢

可能有的小伙伴看到案例2的解釋覺得不會,但是錯誤,因為這里有一個配置項:deep:true,

當(dāng)開啟這個選項的時候,就會遞歸收集,那么相當(dāng)于obj.value的對象也被監(jiān)聽了,所以會觸發(fā)

但是當(dāng)你把deep:true改成false或者不做配置就不會

4.案例4

 watch(
   () => obj,
   (newVal, oldVal) => {
     console.log(newVal, oldVal);
   }
 );

只改變地第一個參數(shù)的傳遞方式,其他不變,當(dāng)然deep這個參數(shù)取消了,那么以上的幾種方式會觸發(fā)執(zhí)行嗎

很遺憾告訴大家,一個都不會觸發(fā)

這里就涉及到watch第一個參數(shù)傳參的方式了:

如果當(dāng)傳的是一個函數(shù),那么vue不會對這個函數(shù)做處理,監(jiān)聽的也是這個函數(shù)的返回值,相當(dāng)于你監(jiān)聽的是這個obj,而不是obj.value,而響應(yīng)式攔截是需要監(jiān)聽數(shù)據(jù),即在這里如果想實現(xiàn)修改變化,需要監(jiān)聽的是obj.value

但是當(dāng)deep設(shè)置為true時,結(jié)果又不一樣了

除了obj = { a: 2 } 不會重新觸發(fā),其他都會觸發(fā),是因為deep:true會遞歸收集依賴,所以修改都會變化

5.案例5

watch(
  obj.value,
  (newVal, oldVal) => {
    console.log(newVal, oldVal);
  },

);

這里又不一樣了,第一個參數(shù)是obj.value

那么obj.value.a = 2會不會觸發(fā)執(zhí)行呢?

答案是會!

解釋一下:此時第一個參數(shù)obj.value,其實就相當(dāng)于第一個參數(shù)是reactive,你修改reactive的屬性的值,肯定是會觸發(fā)重新執(zhí)行的

6.案例6

修改賦值為obj = { a: 2 } 答案肯定是不會重新觸發(fā)的,對象的地址都發(fā)生了變化,不再是原來那個對象了,當(dāng)時你設(shè)置obj.value = {a:2} 是一樣的

7. 案例7

修改obj.b.c = 2 呢,會重新觸發(fā),因為watch監(jiān)聽reactive默認deep:true,默認進行深度監(jiān)聽

總結(jié)

以上就是關(guān)于watch使用中需要注意的點;說實話,如果沒有看過源碼的話,這些問題很容易對開發(fā)產(chǎn)生影響,所以大家如果沒事的時候可以去嘗試閱讀一下源碼

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

相關(guān)文章

  • vue實現(xiàn)商城購物車功能

    vue實現(xiàn)商城購物車功能

    這篇文章主要為大家詳細介紹了vue實現(xiàn)商城購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue + Element UI圖片上傳控件使用詳解

    Vue + Element UI圖片上傳控件使用詳解

    這篇文章主要為大家詳細介紹了Vue + Element UI圖片上傳控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Vue入門之a(chǎn)nimate過渡動畫效果

    Vue入門之a(chǎn)nimate過渡動畫效果

    這篇文章主要介紹了Vue入門之a(chǎn)nimate過渡動畫效果的相關(guān)資料,需要的朋友可以參考下
    2018-04-04
  • 如何在在Vue3中使用markdown 編輯器組件

    如何在在Vue3中使用markdown 編輯器組件

    vue3發(fā)布正式版不久,生態(tài)還沒完全發(fā)展起來,目前支持vue3的開源markdown編輯器組件基本上也寥寥無幾,向大家推薦一個很好用的v-md-editor 組件,組件功能很強大,文檔也比較詳細。該文章只介紹組件的常用功能,更多高級的功能可以參考官方文檔。
    2021-05-05
  • Element UI 上傳組件實現(xiàn)文件上傳并附帶額外參數(shù)功能

    Element UI 上傳組件實現(xiàn)文件上傳并附帶額外參數(shù)功能

    在使用 ElementUI 的上傳組件 el-upload 實現(xiàn)文件上傳功能時,如果單文件上傳是比較簡單的,但是在實際需求中,往往會在上傳文件時伴隨著一些其他參數(shù),怎么操作呢,下面通過示例代碼講解感興趣的朋友一起看看吧
    2023-08-08
  • 解決找不到模塊“xxx.vue”或其相應(yīng)的類型聲明問題

    解決找不到模塊“xxx.vue”或其相應(yīng)的類型聲明問題

    這篇文章主要介紹了解決找不到模塊“xxx.vue”或其相應(yīng)的類型聲明問題,具有很好的參考價值,希望對大家有所幫助。
    2022-10-10
  • Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題

    Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題

    這篇文章主要介紹了Vue路由跳轉(zhuǎn)傳參或者打開新頁面跳轉(zhuǎn)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue?指令與過濾器案例代碼

    vue?指令與過濾器案例代碼

    這篇文章主要介紹了vue?指令與過濾器,本文通過案例代碼給大家詳細講解,給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • vueRouter--matcher之動態(tài)增減路由方式

    vueRouter--matcher之動態(tài)增減路由方式

    這篇文章主要介紹了vueRouter--matcher之動態(tài)增減路由方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue2集成Lodop插件實現(xiàn)在線打印功能

    Vue2集成Lodop插件實現(xiàn)在線打印功能

    這篇文章主要為大家詳細介紹了Vue2如何集成Lodop插件實現(xiàn)在線打印功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03

最新評論