当前位置: 首页 > news >正文

Vue3.0教程005:watch监视ref定义的【基本类型】数据和【对象类型】数据

文章目录

  • 4、watch监视
    • 4.1 前言
    • 4.2 情况一
    • 4.3 情况二

4、watch监视

4.1 前言

  • 作用:监视数据的变化(和vue2中的watch作用一致)
  • 特点:Vue3中的watch只能监视以下四种数据:
    • ref定义的数据。
    • reactive定义的数据。
    • 函数返回一个值。
    • 一个包含上述内容的数组。

4.2 情况一

监视ref定义的【基本类型】数据:直接写数据名即可,监视的是其value值的改变。

<template><div><el-card style="max-width: 480px"><template #header><div class="card-header"><span>监视【ref】定义的【基本类型】数据</span></div></template><h2>当前求和为:{{sum}}</h2><el-button type="success" @click="changeSum">点我+1</el-button><template #footer>监视属性watch:<el-tag type="info">情况一</el-tag></template></el-card></div>
</template><script lang="ts" setup>
import {ref, watch} from 'vue'let sum = ref(0)function changeSum(){sum.value += 1;
}// 监视 watch(谁?, 回调函数)
watch(sum, (newValue, oldValue)=>{console.log('sum变化了', newValue, oldValue);
})
</script><style scoped></style>

注意:

  • 监视ref数据的时候,不需要写value
    • watch(sum, (newValue, oldValue))

4.3 情况二

监视ref定义的对象类型数据,实现代码:

<template><div><el-row :gutter="4"><el-col :span="12"><el-card style="max-width: 480px"><template #header><div class="card-header"><span>监视【ref】定义的【基本类型】数据</span></div></template><h2>当前求和为:{{sum}}</h2><el-button size="small" type="success" @click="changeSum">点我+1</el-button><template #footer>监视属性watch:<el-tag type="info">情况一</el-tag></template></el-card></el-col><el-col :span="12"><el-card style="max-width: 480px"><template #header><div class="card-header"><span>监视【ref】定义的【对象类型】数据</span></div></template><h2>姓名:{{person.name}}</h2><h2>年龄:{{person.age}}</h2><el-button size="small" type="primary" @click="changeName">修改名字</el-button><el-button size="small" type="success" @click="changeAge">修改年龄</el-button><el-button size="small" type="danger" @click="changePerson">修改全部</el-button><template #footer>监视属性watch:<el-tag type="info">情况二</el-tag></template></el-card></el-col></el-row></div>
</template><script lang="ts" setup>
import {ref, watch} from 'vue'let sum = ref(0)let person = ref({name: '张三',age: 18
})function changeSum(){sum.value += 1;
}function changeName(){person.value.name += '~'
}function changeAge(){person.value.age += 1
}function changePerson(){person.value = {name: '李四', age: 25}
}// 监视 watch(谁?, 回调函数)
watch(sum, (newValue, oldValue)=>{console.log('✅sum变化了', newValue, oldValue)
})watch(person, (newValue, oldValue)=>{console.log("✅person变化了:",newValue, oldValue)
})
</script><style scoped></style>

实现效果,这里监视的是整个对象,只有点击【修改全部】的时候,才能触发监视器:

image-20250520222144443

如果想监视对象的某一个属性【name/age】,则需要开启深度监视,修改监视代码,添加deep:true

watch(person, (newValue, oldValue)=>{console.log("✅person变化了:",newValue, oldValue)
},{deep:true})

实现效果:

image-20250520222526780

如果开启立即监视,即刷新页面的时候,当数据没有改变的时候就监视,实现代码如下:

watch(person, (newValue, oldValue)=>{console.log("✅person变化了:",newValue, oldValue)
},{deep:true, immediate:true})

打印结果如下,当刷新浏览器,页面数据没有变化,但仍会默认监视,但是此时旧的值是undefined

image-20250520222825822

相关文章:

  • 数据结构与算法分析实验14 实现基本排序算法
  • 5.2.4 wpf中MultiBinding的使用方法
  • 保密行业工作沟通安全:吱吱软件的“四重防泄露”设计
  • Python虚拟环境再PyCharm中自由切换使用方法
  • Git 和 GitHub 学习指南本地 Git 配置、基础命令、GitHub 上传流程、企业开发中 Git 的使用流程、以及如何将代码部署到生产服务器
  • Linux 的 TCP 网络编程 -- 回显服务器,翻译服务器
  • C#处理印尼地区的数字分隔符方法
  • leetcode 162. Find Peak Element
  • 人工智能的“歧视”:“她数据”在算法运行中隐形
  • 《Effective Python》第三章 循环和迭代器——永远不要在迭代容器的同时修改它们
  • 基于Gitee 的开发分支版本管理规范
  • 字符串(二)
  • leetcode 153. Find Minimum in Rotated Sorted Array
  • RabbitMQ的基本使用
  • 力扣-盛最多水的容器
  • 文件包含靶场实现
  • RK3576 Android 14.0 SDK开发指南(第一集)
  • vivado fpga程序固化
  • FPGA:基于Vivado的仿真流程与波形调试实践
  • 企业级网络安全护盾:剖析高防IP原理与防护策略
  • 美媒:鲁比奥称特朗普不出席二十国集团领导人会议
  • 黄仁勋:美国芯片管制完全错误,阻碍别人发展只会激励他们更努力
  • 受贿2.61亿余元,陕西省政协原主席韩勇一审被判死缓
  • 学生靠老干妈下饭、职工餐肉类又多又好?纪委出手整治
  • 嫩黑线货物列车脱轨致1名路外人员死亡,3人被采取刑事强制措施
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破