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

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.xdnf.cn/news/7511.html

相关文章:

  • Vortex GPGPU的github流程跑通与功能模块波形探索(三)
  • 系统设计——项目设计经验总结1
  • arcgispro双击打开没反应怎么办
  • 基于 ABP vNext + CQRS + MediatR 构建高可用与高性能微服务系统:从架构设计到落地实战
  • ubuntu设置conda虚拟环境
  • es疑惑解读
  • 基于HTML的Word风格编辑器实现:从零打造功能完备的富文本编辑器
  • 【c# 类型转换中 as 和()】
  • 题解:AT_abc244_e [ABC244E] King Bombee
  • 如何使用AI辅助开发CSS3 - 通义灵码功能全解析
  • 杰发科技AC7840——如何把结构体数据写到Dflash中
  • 科技赋能,开启现代健康养生新潮流
  • 聊一聊接口的安全测试如何进行的?
  • 【JavaEE】多线程
  • Java转Go日记(四十一):Gorm删除
  • Java大师成长计划之第28天:处理多线程的Web应用
  • 嵌入式学习笔记 - CAN总线
  • 房贷利率计算前端小程序
  • 图论学习笔记 3
  • 电磁感应在量子计算中如何应用
  • Adv. Sci.|南医大倪春辉团队破局肺纤维化:锁定脂肪酸氧化与糖酵解 “失衡点”,挖掘关键治疗靶点
  • python宠物用品商城系统
  • 深度解析Vue项目Webpack打包分包策略 从基础配置到高级优化,全面掌握性能优化核心技巧
  • 【Java的批量操作】
  • 【leetcode】59. 斐波那契数
  • RK3568 OH5.1 源码编译及问题
  • 海康威视摄像头C#开发指南:从SDK对接到安全增强与高并发优化
  • React+TypeScript多步骤表单:告别表单地狱的现代解决方案
  • 请问交换机和路由器的区别?vlan 和 VPN 是什么?
  • Python + moviepy:根据图片或数据高效生成视频全流程详解