vue3.0中的watch偵聽器實例詳解
前言
雖然計算屬性在大多數(shù)情況下更合適,但有時也需要一個自定義的偵聽器。這就是為什么 Vue 通過watch選項提供了一個更通用的方法,來響應(yīng)數(shù)據(jù)的變化。當需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,這個方式是最有用的。
偵聽器和計算屬性的區(qū)別
計算屬性里不可以做異步操作,偵聽器可以做異步操作,相當于計算屬性的升級版
vue3如何使用watch呢?
基本使用
<template>
<h1>watch偵聽器頁面</h1>
<p>普通偵聽數(shù)據(jù):{{ num }}</p>
<button @click="butFn">點擊</button>
</template>
script
import { ref, watch } from 'vue'
// 記得用到什么就要導入什么vue3的新特性,按需調(diào)用
setup() {
const num = ref(0)
// watch(要偵聽的數(shù)據(jù),回調(diào)函數(shù))
watch(num, (v1, v2) => {
// v1 是改變以后的新值
// v2 是改變前的值
console.log(v1, v2)
// 要點:偵聽普通函數(shù)可以獲取修改前后的值,被偵聽的數(shù)據(jù)必須是響應(yīng)式的
})
// 單機事件
const butFn = () => {
num.value++
}
return { butFn, num }
}
監(jiān)聽多個響應(yīng)式數(shù)據(jù)
const num = ref(0)
const num2 = ref(20)
watch([num, num2], (v1, v2) => {
// 存入的結(jié)果是一個數(shù)組,結(jié)果返回的也是一個已數(shù)組格式的結(jié)果
// v1是最新結(jié)果的數(shù)組
// v2是舊數(shù)據(jù)的數(shù)組
console.log('v1', v1, 'v2', v2)
// 總結(jié):可以得到更新前后的值,偵聽的結(jié)果也是數(shù)組數(shù)據(jù)順序一致
})
偵聽reactive定義的響應(yīng)式數(shù)據(jù)
const obj = reactive({
msg: '奇奇怪怪可可愛愛'
})
watch(obj, () => {
// 只能獲取到最新的值
console.log(obj.msg)
})
總結(jié):如果偵聽對象,那么偵聽器的回調(diào)函數(shù)的兩個參數(shù)是一樣的結(jié)果,表示最新的對象數(shù)據(jù),此時也可以直接讀取被偵聽的對象,那么得到的值也是最新的。
監(jiān)聽reactive定義的響應(yīng)式數(shù)據(jù)的某一個屬性
const obj = reactive({
msg: '奇奇怪怪可可愛愛'
})
watch(() => obj.msg,(v1, v2) => {
// v1 就是被監(jiān)聽數(shù)據(jù)的最新值
// v2 就是被監(jiān)聽數(shù)據(jù)的原有值
console.log(v1, v2)
// 總結(jié):如果偵聽對象中當個屬性,需要使用箭頭函數(shù)的方式
// 偵聽更少的數(shù)據(jù)有利于提高性能
}
)
配置選項用法
const obj = reactive({
msg: {
info: 'ooo'
}
})
watch(() => obj.msg,(v1, v2) => {
console.log(v1, v2)
},
{
// 首次渲染組件就觸發(fā)一次
immediate: true,
// 開啟深度監(jiān)聽,對象里面的數(shù)據(jù)如果發(fā)生變化也會被偵聽到
// 如果監(jiān)聽的數(shù)據(jù)是一個比較長的表達式,那么需要用一個函數(shù)的方式
// 但是寫成函數(shù)形式之后,里層的數(shù)據(jù)變化不到,所以需要添加deep選項
deep: true
}
)
總結(jié)
到此這篇關(guān)于vue3.0中watch偵聽器實例詳解的文章就介紹到這了,更多相關(guān)vue3.0 watch偵聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vuejs element table 表格添加行,修改,單獨刪除行,批量刪除行操作
這篇文章主要介紹了vuejs element table 表格添加行,修改,單獨刪除行,批量刪除行操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
vue3中通過ref獲取元素節(jié)點的實現(xiàn)
這篇文章主要介紹了vue3中通過ref獲取元素節(jié)點的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
解決antd Form 表單校驗方法無響應(yīng)的問題
這篇文章主要介紹了解決antd Form 表單校驗方法無響應(yīng)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Vue無法訪問.env.development定義的變量值問題及解決
這篇文章主要介紹了Vue無法訪問.env.development定義的變量值問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01

