watch监视reactive对象类型数据
- 首先呢,我们先将我们上次用ref写的代码改一下,改成用reactive
<template>
<div class="person">
<h2>{{ ItShare.name }}</h2>
<h2>{{ ItShare.title }}</h2>
<button @click="ChangeName">修改名称</button>
<button @click="ChangeTitle">修改标题</button>
<button @click="ChangeItshare">修改对象</button>
</div>
</template>
<script lang="ts" setup>
import { reactive, watch } from 'vue';
let ItShare = reactive({
name: 'IT知识一享',
title: '学习VUE'
})
function ChangeName() {
ItShare.name += '*';
}
function ChangeTitle() {
ItShare.title = '学习VUE' + '基础';
}
function ChangeItshare() {
Object.assign(ItShare, {
name: 'Itshare',
title: '精通VUE'
})
}
</script>
<style scoped>
.person{
background-color: rgb(39, 148, 191);
padding-left: 50px;
}
.btn {
display: flex;
gap:20px
}
</style>
- 现在还像之前写一下监视
watch(ItShare,(newvalue,oldvale) => {
console.log('ItShare对象被修改了',newvalue,oldvale);
})

- 我们发现使用reactive定义的对象,无论是对象里面的属性,还是对象本身都可以被监视到;因为watch监视reactive定义的对象类型数据,默认情况下就开启深度监视,并且深度监视无法被关闭;所以我们它可以读取到对象内部属性,也可以读取到对象本身的变化;
- 和watch监视ref对象类型数据一样,当我们监视ref对象属性的时候,新值和旧值是一样的,很简单,因为它们是同一个对象,对象本身并没有改变,我们并没有创建一个新的对象出来,所以新值和旧值都一样
为什么无法关闭深度监视?
reactive的本质就是用于创建深度响应的对象,它本身就会追踪对象所有层级属性的变化,Vue为了确保行为一致性,所以在使用watch监听reactive的数据的时候,会强制进行深度监听,以确保任何嵌套属性的变化都能被捕获到,即使你使用{deep: false},深度监听依然会生效
648

被折叠的 条评论
为什么被折叠?



