Vue WatchEffect函數(shù)創(chuàng)建高級(jí)偵聽(tīng)器
WatchEffect高級(jí)偵聽(tīng)器
在 Vue 3 中,我們可以使用 watchEffect 函數(shù)來(lái)創(chuàng)建高級(jí)偵聽(tīng)器。與 watch 和 computed 不同,watchEffect 不需要指定依賴項(xiàng),它會(huì)自動(dòng)追蹤響應(yīng)式狀態(tài)的變化,并在變化時(shí)重新運(yùn)行。
使用 watchEffect 函數(shù)
下面是一個(gè)簡(jiǎn)單的示例,使用 watchEffect 函數(shù)來(lái)偵聽(tīng)一個(gè)響應(yīng)式狀態(tài),并在狀態(tài)變化時(shí)輸出一條消息:
import { reactive, watchEffect } from 'vue';
const state = reactive({
count: 0,
});
watchEffect(() => {
console.log(`Count is now: ${state.count}`);
});
// 改變狀態(tài),輸出 Count is now: 1
state.count++;
在上面的示例中,我們使用 reactive 函數(shù)來(lái)創(chuàng)建一個(gè)響應(yīng)式對(duì)象 state,并使用 watchEffect 函數(shù)來(lái)創(chuàng)建一個(gè)偵聽(tīng)器。watchEffect 函數(shù)接受一個(gè)函數(shù)作為參數(shù),這個(gè)函數(shù)會(huì)被自動(dòng)運(yùn)行,并在其中使用響應(yīng)式狀態(tài)。當(dāng)其中任何一個(gè)響應(yīng)式狀態(tài)發(fā)生變化時(shí),這個(gè)函數(shù)會(huì)被重新運(yùn)行。
停止偵聽(tīng)
與 watch 和 computed 不同,watchEffect 函數(shù)不會(huì)返回一個(gè)停止偵聽(tīng)的函數(shù)。如果我們需要停止偵聽(tīng),我們可以將 watchEffect 的返回值設(shè)為 null,例如:
import { reactive, watchEffect } from 'vue';
const state = reactive({
count: 0,
});
const stop = watchEffect(() => {
console.log(`Count is now: ${state.count}`);
});
// 改變狀態(tài),輸出 Count is now: 1
state.count++;
// 停止偵聽(tīng)
stop();
在上面的示例中,我們將 watchEffect 的返回值保存到一個(gè)變量 stop 中,然后在需要停止偵聽(tīng)時(shí)調(diào)用這個(gè)函數(shù)。
偵聽(tīng)多個(gè)狀態(tài)
如果需要偵聽(tīng)多個(gè)響應(yīng)式狀態(tài),我們可以在 watchEffect 函數(shù)中使用這些狀態(tài),并在函數(shù)中返回一個(gè)計(jì)算值,例如:
import { reactive, watchEffect } from 'vue';
const state = reactive({
count1: 0,
count2: 0,
});
watchEffect(() => {
const sum = state.count1 + state.count2;
console.log(`Sum is now: ${sum}`);
});
// 改變狀態(tài),輸出 Sum is now: 1
state.count1++;
// 改變狀態(tài),輸出 Sum is now: 3
state.count2 += 2;
在上面的示例中,我們使用 reactive 函數(shù)創(chuàng)建一個(gè)響應(yīng)式對(duì)象 state,并在 watchEffect 函數(shù)中使用了 state.count1 和 state.count2 兩個(gè)響應(yīng)式狀態(tài),然后計(jì)算了這兩個(gè)狀態(tài)的和,并輸出了這個(gè)和。
懶執(zhí)行
與 computed 類似,watchEffect 函數(shù)也支持懶執(zhí)行(lazy evaluation)。如果我們將 watchEffect 的第二個(gè)參數(shù)設(shè)置為 { lazy: true },則這個(gè)函數(shù)會(huì)在第一次訪問(wèn)響應(yīng)式狀態(tài)時(shí)才會(huì)被運(yùn)行,例如:
import { reactive, watchEffect } from 'vue';
const state = reactive({
count: 0,
});
watchEffect(
() => {
console.log(`Count is now: ${state.count}`);
},
{ lazy: true }
);
// 訪問(wèn)狀態(tài),輸出 Count is now: 1
state.count++;
在上面的示例中,我們將 watchEffect 的第二個(gè)參數(shù)設(shè)置為 { lazy: true },然后在代碼中訪問(wèn)了響應(yīng)式狀態(tài) state.count。這時(shí),watchEffect 中的函數(shù)才會(huì)被運(yùn)行。
總結(jié)
watchEffect 函數(shù)是 Vue 3 中的一個(gè)新特性,它可以用來(lái)創(chuàng)建高級(jí)偵聽(tīng)器,自動(dòng)追蹤響應(yīng)式狀態(tài)的變化,并在變化時(shí)重新運(yùn)行。與 watch 和 computed 不同,watchEffect 不需要指定依賴項(xiàng),它會(huì)自動(dòng)追蹤響應(yīng)式狀態(tài)的變化。如果需要停止偵聽(tīng),我們可以將 watchEffect 的返回值設(shè)為 null。如果需要偵聽(tīng)多個(gè)響應(yīng)式狀態(tài),我們可以在 watchEffect 函數(shù)中使用這些狀態(tài),并在函數(shù)中返回一個(gè)計(jì)算值。watchEffect 函數(shù)也支持懶執(zhí)行(lazy evaluation),可以在第一次訪問(wèn)響應(yīng)式狀態(tài)時(shí)才會(huì)被運(yùn)行。
到此這篇關(guān)于Vue WatchEffect函數(shù)創(chuàng)建高級(jí)偵聽(tīng)器的文章就介紹到這了,更多相關(guān)Vue WatchEffect內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue不同項(xiàng)目之間傳遞、接收參數(shù)問(wèn)題
這篇文章主要介紹了Vue不同項(xiàng)目之間傳遞、接收參數(shù)問(wèn)題,主要針對(duì)是登錄操作,我們?yōu)榱送瓿蒘SO(Single Sign On)的效果,認(rèn)證和授權(quán)在UC完成,用戶發(fā)起資源請(qǐng)求,服務(wù)網(wǎng)關(guān)會(huì)進(jìn)行過(guò)濾,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
vite+vue3+tsx項(xiàng)目打包后動(dòng)態(tài)路由無(wú)法加載頁(yè)面的問(wèn)題及解決
這篇文章主要介紹了vite+vue3+tsx項(xiàng)目打包后動(dòng)態(tài)路由無(wú)法加載頁(yè)面的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue 過(guò)渡(動(dòng)畫)transition組件案例詳解
這篇文章主要介紹了Vue 過(guò)渡(動(dòng)畫)transition組件案例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01
vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式
這篇文章主要介紹了vue項(xiàng)目中使用crypto-js實(shí)現(xiàn)加密解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
vue-cli的index.html中使用環(huán)境變量方式
這篇文章主要介紹了vue-cli的index.html中使用環(huán)境變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
vue中的keep-alive詳解與應(yīng)用場(chǎng)景
keep-alive是vue中的內(nèi)置組件,能在組件切換過(guò)程中將狀態(tài)保留在內(nèi)存中,防止重復(fù)渲染DOM,本文給大家介紹vue中的keep-alive詳解與應(yīng)用場(chǎng)景,感興趣的朋友一起看看吧2023-11-11
vue如何在多個(gè)不同服務(wù)器下訪問(wèn)不同地址
這篇文章主要介紹了vue如何在多個(gè)不同服務(wù)器下訪問(wèn)不同地址,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
el-table表頭根據(jù)內(nèi)容自適應(yīng)完美解決表頭錯(cuò)位和固定列錯(cuò)位
這篇文章主要介紹了el-table表頭根據(jù)內(nèi)容自適應(yīng)完美解決表頭錯(cuò)位和固定列錯(cuò)位,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Vue-admin-template?報(bào)Uncaught?(in?promise)?error問(wèn)題及解決
這篇文章主要介紹了Vue-admin-template?報(bào)Uncaught?(in?promise)?error問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

