日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

一、需求分析,問(wèn)題描述

1、需求

監(jiān)聽(tīng)數(shù)組或?qū)ο螅薷钠鋵傩詳?shù)據(jù),但watch并沒(méi)有監(jiān)聽(tīng)到變化,尋找原因和解決方式。

2、問(wèn)題

  • 怎樣正確使用watch監(jiān)聽(tīng)對(duì)象和數(shù)組?
  • 怎樣停止watch監(jiān)聽(tīng)?

二、解決問(wèn)題,答案速覽

1、Watch監(jiān)聽(tīng)器-監(jiān)聽(tīng)Ref

(1)監(jiān)聽(tīng)單個(gè)ref對(duì)象

對(duì)于單個(gè)ref對(duì)象的監(jiān)聽(tīng),我們只需要直接監(jiān)聽(tīng)即可,沒(méi)有套路。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let nameRef = ref('大澈')
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  nameRef.value = '程序員大澈'
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
watch(nameRef, (newValue, oldValue) => {
  console.log(`新的值是:${newValue},舊的值是:${oldValue}`);
})
</script>

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(2)監(jiān)聽(tīng)單個(gè)ref對(duì)象的值-基本類(lèi)型值

對(duì)于單個(gè)ref對(duì)象的基本類(lèi)型值的監(jiān)聽(tīng),我們需要借助getter函數(shù)監(jiān)聽(tīng)。直接監(jiān)聽(tīng)會(huì)報(bào)警告,并且監(jiān)聽(tīng)不到變化。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let nameRef = ref('大澈')
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  nameRef.value = '程序員大澈'
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
watch(() => nameRef.value, (newValue, oldValue) => {
  console.log(`新的值是:${newValue},舊的值是:${oldValue}`);
})
</script>

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(3)監(jiān)聽(tīng)單個(gè)ref對(duì)象的值-復(fù)雜類(lèi)型值

內(nèi)部自動(dòng)將值轉(zhuǎn)為reactive對(duì)象,監(jiān)聽(tīng)reactive對(duì)象的詳細(xì)見(jiàn)下文。

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(4)監(jiān)聽(tīng)多個(gè)ref對(duì)象或其值

對(duì)于多個(gè)ref對(duì)象或其值的監(jiān)聽(tīng),我們需要使用數(shù)組將watch監(jiān)聽(tīng)器的目標(biāo)包裹。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let nameRef111 = ref('大澈111')
let nameRef222 = ref('大澈222')
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  nameRef111.value = '程序員大澈111'
  nameRef222.value = '程序員大澈222'
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
watch([nameRef111, () => nameRef222.value], (newValue, oldValue) => {
  console.log(`新的值是:${newValue[0]},舊的值是:${oldValue[0]}`);
})
</script>

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

2、Watch監(jiān)聽(tīng)器-監(jiān)聽(tīng)Reactive

(1)監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值

對(duì)于單個(gè)reactive對(duì)象的對(duì)象類(lèi)型值的監(jiān)聽(tīng),我們只需要直接監(jiān)聽(tīng)即可,沒(méi)有套路。

但此時(shí)我們會(huì)發(fā)現(xiàn),watch的新值和舊值是相同的,為什么會(huì)這樣呢?又怎么解決呢?

因?yàn)閷?duì)于引用類(lèi)型數(shù)據(jù),賦值存的是地址,地址指向的是堆,所以無(wú)論值怎么改變,新舊對(duì)象都指向同一個(gè)地址。

至于解決的辦法很簡(jiǎn)單, 我們不去直接監(jiān)聽(tīng)一個(gè)引用類(lèi)型,而是去監(jiān)聽(tīng)引用類(lèi)型中一個(gè)具體的值即可。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let dataReactive = reactive({
  name: '大澈',
})
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  dataReactive.name = '程序員大澈'
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
watch(dataReactive, (newValue, oldValue) => {
  console.log(`新的值是:${newValue.name},舊的值是:${oldValue.name}`);
})
</script>

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(2)監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值-基本類(lèi)型屬性

對(duì)于單個(gè)reactive對(duì)象的對(duì)象類(lèi)型值的基本類(lèi)型屬性的監(jiān)聽(tīng),我們需要借助getter函數(shù)監(jiān)聽(tīng)。直接監(jiān)聽(tīng)會(huì)報(bào)警告,并且監(jiān)聽(tīng)不到變化。

值得注意的是,watch的新值和舊值是不同的了。

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(3)監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值-對(duì)象類(lèi)型屬性

對(duì)于單個(gè)reactive對(duì)象的對(duì)象類(lèi)型值的對(duì)象類(lèi)型屬性的監(jiān)聽(tīng),我們需要借助getter函數(shù)監(jiān)聽(tīng)。直接監(jiān)聽(tīng)會(huì)報(bào)警告,并且監(jiān)聽(tīng)不到變化。

如果是監(jiān)聽(tīng)整個(gè)對(duì)象類(lèi)型屬性,只有進(jìn)行整個(gè)對(duì)象替換時(shí),才不需要開(kāi)啟deep深度監(jiān)聽(tīng)。其它時(shí)候,如修改、刪除、新增,都需要開(kāi)啟deep深度監(jiān)聽(tīng),才能監(jiān)聽(tīng)數(shù)據(jù)的變化。

如果是監(jiān)聽(tīng)對(duì)象類(lèi)型屬性中的某個(gè)屬性值,則不需要開(kāi)啟deep深度監(jiān)聽(tīng)。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let dataReactive = reactive({
  obj: {
    age: 18,
  },
})
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  dataReactive.obj.age = 99
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
watch(() => dataReactive.obj, (newValue, oldValue) => {
  console.log(`新的值是:${newValue.age},舊的值是:${oldValue.age}`);
}, {
  deep: true,
})
</script>

Vue3問(wèn)題:如何解決Watch監(jiān)聽(tīng)對(duì)象數(shù)組失效,及如何停止監(jiān)聽(tīng)?

(4)監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值-數(shù)組類(lèi)型屬性

同監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值-對(duì)象類(lèi)型屬性。

(5)監(jiān)聽(tīng)單個(gè)reactive對(duì)象-數(shù)組類(lèi)型值

所有情況都同監(jiān)聽(tīng)單個(gè)reactive對(duì)象-對(duì)象類(lèi)型值。

(6)監(jiān)聽(tīng)多個(gè)reactive對(duì)象值或其屬性值

同監(jiān)聽(tīng)多個(gè)ref對(duì)象或其值。

三、問(wèn)題解析,知識(shí)總結(jié)

1、怎樣正確使用watch監(jiān)聽(tīng)對(duì)象和數(shù)組?

內(nèi)容如上。

2、怎樣停止watch監(jiān)聽(tīng)?

有的時(shí)候,我們可能只需要監(jiān)聽(tīng)一次。在監(jiān)聽(tīng)之后,我們就需要取消對(duì)watch的監(jiān)聽(tīng)。此時(shí)我們可以這樣做,將watch監(jiān)聽(tīng)器賦值給一個(gè)變量,在取消監(jiān)聽(tīng)的時(shí)候調(diào)用此變量即可。

<script setup>
import { reactive, ref, watch, computed } from 'vue';
// 定義數(shù)據(jù)
let nameRef = ref('大澈')
// 點(diǎn)擊事件-修改數(shù)據(jù)的值
const handleChange = () => {
  nameRef.value = '程序員大澈'
}
// 點(diǎn)擊事件-停止對(duì)應(yīng)的watch監(jiān)聽(tīng)數(shù)據(jù)
const handleStopChange = () => {
  stopWatch()
}
// 監(jiān)聽(tīng)數(shù)據(jù)變化
const stopWatch = watch(() => nameRef.value, (newValue, oldValue) => {
  console.log(`新的值是:${newValue},舊的值是:${oldValue}`);
})
</script>

分享到:
標(biāo)簽:Vue
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定