全面總結(jié)Vue3.0的多種偵聽方式
偵聽器
雖然計算屬性在大多數(shù)情況下更合適,但有時也需要一個自定義的偵聽器。這就是為什么 Vue 通過watch選項提供了一個更通用的方法,來響應(yīng)數(shù)據(jù)的變化。當(dāng)需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,這個方式是最有用的。
一、wacthEffect
立即執(zhí)行,沒有immediate
偵聽,watchEffect是立即執(zhí)行的,沒有immediate,不需要傳遞偵聽的內(nèi)容,自動會感知代碼依賴,不需要傳參,只需要傳一個回調(diào)函數(shù)不能獲取之前的值
如果需要停用偵聽器,可以回調(diào)這個偵聽器函數(shù)
const stop = watchEffect(()=>{
// console.log('num:',num.value);
// console.log('num:',str.value);
})
二、watch
不會立即執(zhí)行,需要手動開啟immediate
// 指定主要偵聽的值num
watch(num,(val,oval)=>{
// val:新值,oval:之前的值
// console.log(num.value);
// console.log(val,oval);
},{//第二個參數(shù)obj immediate,deep
immediate:true//默認(rèn)就是只有數(shù)據(jù)改變時才會監(jiān)聽,
// 第一次創(chuàng)建的時候不會執(zhí)行,設(shè)置成true,第一次就會執(zhí)行
})
- 偵聽ref的數(shù)據(jù)源
- 偵聽reactive數(shù)據(jù)源
1.1第一種方式偵聽
//偵聽state下的id,對象數(shù)據(jù)的變化
watch(state,(val,oval)=>{
// console.log('id',val.id,oval);
},{
immediate:true,
deep:true//開啟深度監(jiān)聽,能夠偵聽到對象屬性值的變化
})
1.2第二種方式偵聽
// 偵聽state.uname
watch(()=>state.uname,(uname,p)=>{
//uname新值,p舊值
console.log(uname,p);
},{
immediate:true
})
1.3偵聽多個數(shù)據(jù)源
//偵聽多個數(shù)據(jù)(id,uname)
//()=>state.id,相當(dāng)于//object.values(toRefs(state))解構(gòu)了
const stop = watch([()=>state.id,()=>state.uname],([id,uname],[oid,oname])=>{
// id新,oid舊
console.log('id',id,oid);
// uname新,oname舊
console.log('uname',uname,oname);
})
總結(jié)
到此這篇Vue3.0多種偵聽方式的文章就介紹到這了,更多相關(guān)Vue3.0偵聽方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue v-viewer組件使用示例詳解(v-viewer輪播圖)
這篇文章主要介紹了vue v-viewer組件使用示例詳解(v-viewer輪播圖),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
淺談vue中數(shù)據(jù)雙向綁定的實現(xiàn)原理
本篇文章主要介紹了淺談vue中數(shù)據(jù)雙向綁定的實現(xiàn)原理 ,主要使用v-model這個數(shù)據(jù)雙向綁定,有興趣的可以了解一下2017-09-09
Vue Router實現(xiàn)多層嵌套路由的導(dǎo)航的詳細(xì)指南
在 Vue 應(yīng)用中,使用 Vue Router 可以輕松實現(xiàn)多層嵌套路由的導(dǎo)航,嵌套路由允許你創(chuàng)建一個多層次的 URL 結(jié)構(gòu),這在構(gòu)建具有復(fù)雜導(dǎo)航結(jié)構(gòu)的應(yīng)用程序時非常有用,需要的朋友可以參考下2024-10-10

