watch监视reactive对象类型数据

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},深度监听依然会生效

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值