vue3中的watch 上

2021-03-02 前端架構師
vue3 中的watch

接受三個參數:參數1:監聽的數據源 (可以為一個ref或者一個函數) 參數2:回調函數 (newValue, oldValue) => {} 參數3:深度監聽或立即執行的配置(deep: true, imediate: true)

首先展示ref 監聽的常規寫法:

<template>
<div>
{{qdleader}}
<button @click="changeData"></button>
</div>

</template>

<script>

import {ref, toRefs, watch, reactive} from 'vue';

export default {
setup() {
const qdleader = ref('qdleader')
const changeData = () => {
qdleader.value = "我變了"
}
watch(qdleader,(newValue,oldValue) => {
console.log("qdleader發生變化時候",newValue,oldValue)
})
return {
qdleader,
changeData
}
}
}
</script>

2.在state 的寫法中怎麼用呢?注意在這裡你直接寫state.qdleader是不好使的,你要寫() => state.qdleader

<template>
<div>
{{qdleader}}
<button @click="changeData"></button>
</div>
</template>

<script>

import {ref, toRefs, watch, reactive} from 'vue';

export default {
setup() {
const state = {
qdleader:'qdleader',
changeData: () => {
state.qdleader = '我變了'
}
}

watch(() => state.qdleader,(newValue,oldValue) => {
console.log("qdleader發生變化時候",newValue,oldValue)
})
return {
...toRefs(state)
}
}
}
</script>

那什麼時候用第三個參數呢?怎麼用呢?

<template>
<div>
{{qdleader}}
<button @click="changeData"></button>
</div>
</template>

<script>

import {ref, toRefs, watch, reactive} from 'vue';

export default {
setup() {
const state = {
qdleader:'qdleader',
a:{
b:''
},
changeData: () => {
state.a.b = '我變了'
}
}

watch(() => state.a,(newValue,oldValue) => {
console.log("qdleader發生變化時候",newValue,oldValue)
})
return {
...toRefs(state)
}
}
}
</script>

當我們監聽對象屬性時候,監聽a,當a對象中的b發生變化時候,我們會發現,我們根本監聽不到。

這時我們的第三個屬性就閃亮登場了。

<template>
<div>
{{qdleader}}
<button @click="changeData"></button>
</div>
</template>

<script>

import {ref, toRefs, watch, reactive} from 'vue';

export default {
setup() {
const state = {
qdleader:'qdleader',
a:{
b:''
},
changeData: () => {
state.a.b = '我變了'
}
}

watch(() => state.a,(newValue,oldValue) => {
console.log("qdleader發生變化時候",newValue,oldValue)
},{
deep:true, //深度監聽
imediate:true,//一進頁面就監聽
})
return {
...toRefs(state)
}
}
}
</script>

不積跬步無以至千裡,你的付出不會被辜負,前端路一起加油。掃碼回復資料可以領100g前端資料,也可回復加群,加入交流群。

 另有github每日更新精選面試題歡迎star https://github.com/qdleader/qdleader

相關焦點

  • Vue2和Vue3使用層面上有什麼區別
    $emit(vue3中只能在methods裡使用)作用相同 context.emit用法 5. 5.1 使用場景 在vue2中我們在父組件綁定click事件,子組件必須內部觸發click,而vue3中在父組件綁定子組件的根元素上也會跟著綁定 ButtonDemo.vue Button.vue
  • 《前端會客廳》對話winter和尤雨溪,深度探尋Vue3設計思想(上)
    尤大願意往vite這類工具上投入精力,是個非常好的事情,大家苦webpack久矣。vite還給我一個啟發,就是尤大起名的藝術,vue和vite都是法語。有逼格,以後我搞開源 Vue3如此牛皮,我決定我下一個開源項目就叫cur.js。
  • H5大咖分享:Vue3為何使用Proxy實現數據監聽
    前言vue3響應式數據放棄了Object.define Property,而使用Proxy來代替它。我們知道,在 vue2 中,實現數據監聽是使用Object.defineProperty --> 實現方法可看:vue 數據雙向綁定原理。
  • 理解vue中$watch使用
    偵聽組件實例上的響應式 property 或函數計算結果的變化。回調函數得到的參數為新值和舊值。
  • Vue中watch的詳細用法
    1.基本用法下面代碼是watch的一種基本用法:watch去監聽單個值是否發生改變
  • 使用CLI開發一個Vue3的npm庫
    由於Vue3底層大部分代碼採用TypeScript編寫,因此他可以完美的支持TS,我們創建項目時就要考慮到使用我們插件的用戶啟用TS的情況,因此我們要勾上TypeScript,此處我勾選的選項為:vue3, node-sass, eslint+prettier, typescript,可以按照自己的需要去選。
  • vue教程:Vue.js中 watch 的高級用法
    由於 Vue 會在初始化實例時對屬性執行 getter/setter 轉化過程,所以屬性必須在 data 對象上存在才能讓 Vue 轉換它,這樣才能讓它是響應的。默認情況下 handler 只監聽obj這個屬性它的引用的變化,我們只有給obj賦值的時候它才會監聽到,比如我們在 mounted事件鉤子函數中對obj進行重新賦值:mounted: {this.obj = {a: '456'}}那麼如何才讓obj裡面的屬性a變化後,watch自動監聽執行呢?
  • 面試官:Vue中的 computed 和 watch的區別
    它用於觀察Vue實例上的數據變動,當被觀察的 data 的數據變化,執行回調,在方法中會傳入 newVal 和 oldVal。Vue 實例將會在實例化時調用 $watch(),遍歷 watch 對象的每一個屬性。如果你需要在某個數據變化時做一些事情,使用watch。
  • 英語on watch 和 on the watch 的區別
    英語中,on watch 和 on the watch 是兩個相似的詞組,也常常會用到,但是它們的意思和用法並不相同。今天我們一起來學習一下。1. on watch:這個詞組的意思是「值班」。例句1:The man on watch didn't notice the danger.值班的人沒有注意到這危險。例句2:Tom is the man on watch today.湯姆就是今天那個值班的人。
  • 詳解Vue中的computed和watch
    Vue中的computed Vue中的computed又叫做計算屬性,Vue官網中給了下面這樣一個示例。Vue中的watch Vue中的watch又名為偵聽屬性,它主要用於偵聽數據的變化,在數據發生變化的時候執行一些操作。
  • 英語中的「看」watch,see與look的區別
    關於「看」的運用,做一個簡單介紹1.watch1)觀看,注視(形容觀看的內容比較精彩,比較有過程)watch a game/watch a fight(看比賽,觀看打鬥(看得東西都比較有內容)watch Tv2)注意,當心(這個意思see 和 look都沒有)watch out!
  • 英語watch out 和 watch over的區別
    英語中,watch out 和 watch over 是兩個相近的詞組,但是它們的用法並不相同,今天我們一起來學習一下這兩個短語的區別。1. watch out:這個詞組的意思是「小心;注意;提防」的意思。
  • 看手機中的看翻譯成look, see還是watch?
    那麼,問題來了"看手機"的"看",是see,look還是watch?!都不對!為什麼?NO.1不管是see,look還是watch重點都不是看"手機裡的內容"而是"手機本身"①see the②watch the phone是錯的!沒有這種說法!
  • Apple watch的實用性如何?
    最近有個關於智能穿戴的銷售情況統計表,蘋果公司的apple watch銷量排行第一,可見apple watch的受歡迎程度。說到Apple Watch ,世界第一智能手錶的稱號如雷貫耳,其精良的做工以及實用的功能也確實配得起這個稱號。
  • 【Vue原理】Watch - 白話版
    watch 是如何工作的,所以這邊文章我也✍得很快根據 watch 的 api,我們需要了解三個地方1、監聽的數據改變的時,watch 如何工作2、設置 immediate 時,watch 如何工作3、設置了 deep 時,watch 如何工作Vue 會把數據設置響應式,既是設置他的 get 和 set當 數據被讀取
  • Apple watch 6 的細節小改動
    充電上,Apple watch 6要更快一些,從0%——100%只需要2個多小時,而Apple watch 5則只充到80%,不過,無所謂,誰會在意多那麼點充電時間呢?相信大家和老楊一樣,都會在不同的時間給Apple watch 充電吧,有的是晚上睡覺、有的是中午午休等等,不過,睡覺的時候可以帶上Apple watch,這樣就能體驗新的睡眠跟蹤功能了。
  • 輕鬆一夏——Silento:Watch Me
    各位朋友,從3月1日「我要學英語」微信平臺建立以來,我們堅持每天給大家推送不同的英語學習內容,至今我們已經一起走過了150天,我們的訂閱用戶也已超過30000
  • apple watch 3多少錢 apple watch series 3售價及發售時間
    apple watch 3多少錢?apple watch series 3售價及發售時間?根據蘋果官網的訂購消息,apple watch Series3將在9月22日正式發售。
  • apple watch怎麼連接藍牙耳機
    apple watch連接藍牙耳機從而實現跑步過程中不必隨身攜帶其他設備也能進行歌曲播放,那麼apple watch怎麼連接藍牙耳機呢apple watch連接藍牙耳機從而實現跑步過程中不必隨身攜帶其他設備也能進行歌曲播放,那麼apple watch怎麼連接藍牙耳機呢?