当前位置: 首页 > 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

http://www.dtcms.com/a/202207.html

相关文章:

  • 数据结构与算法分析实验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原理与防护策略
  • C# 语法篇:字段的定义和运算
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析技术
  • Python实现VTK - 自学笔记(4):用Widgets实现三维交互控制
  • 已解决:Git冲突完全解决指南(附最佳实践)
  • 第三个小程序动工:一款结合ai的菜谱小程序
  • 软考中级软件设计师——计算机网络篇
  • 国产远程工具如何重新定义高效连接?——从协议支持到生态整合的全面解析
  • SPA模式下的es6如何加快宿主页的显示速度
  • Index-AniSora技术升级开源:动漫视频生成强化学习
  • 深入解析FramePack:高效视频帧打包技术原理与实践