Vue3——Watch侦听器

目录

手动指定监听对象

侦听ref对象

侦听ref对象中的某个属性

reactive写法 

watchEffect 自动侦听

多源侦听

一次性侦听器


        watch 是⼀个⽤于观察和响应Vue响应式系统中数据变化的⽅法。它允许你指定⼀个数据源(可以是 响应式引⽤、计算属性、组件的属性等),当这个数据源的值发⽣变化时,你可以执⾏⼀些响应的副作⽤。 watch 可以⽤来监听任何响应式数据的变化。

手动指定监听对象

基础语法:

import { watch, ref } from 'vue'const count = ref(0)// 监听单个 ref
watch(count, (newVal, oldVal) => {console.log(`计数器变化:${oldVal} → ${newVal}`)
})// 立即执行版
watch(count, callback, { immediate: true })

侦听ref对象

  <div id="app"><select v-model="a"><option value="10">学生</option><option value="12">老师</option><option value="14">教务</option><option value="16">管理员</option></select></div><script type="module">import { createApp, ref, reactive, watch } from '/vue.esm-browser.js'createApp({setup() {const a = ref("")watch(a, (a, b) => {console.log(a + "-------" + b);})return {a,}}}).mount("#app")</script>

如果匿名函数只有一个参数,则这个参数代表新值。

watch(a, (a) => {

          console.log(a);

        })


侦听ref对象中的某个属性

 <div id="app"><select v-model="a.msg"><option value="10">学生</option><option value="12">老师</option><option value="14">教务</option><option value="16">管理员</option></select>{{a}}</div><script type="module">import { createApp, ref, reactive, watch } from '/vue.esm-browser.js'createApp({setup() {const a = ref({msg: "",obj: ""})watch(() => a.value.msg, (a, b) => {console.log(a + "-------" + b);})return {a,}}}).mount("#app")</script>

注意:参数绑定的是a.msg,监听的观察要写成() => a.value.msg

reactive写法 

  <script type="module">import { createApp, ref, reactive, watch } from '/vue.esm-browser.js'createApp({setup() {const a = reactive({msg: "",obj: ""})watch(() => a.msg, (a, b) => {console.log(a + "-------" + b);})return {a,}}}).mount("#app")
        const z = reactive({msg: 0})watch(z, (n, o) => {console.log(n.msg + '---' + o.msg);})

注意:`newValue` 此处和 `oldValue` 是相等的,因为它们是同一个对象

watchEffect 自动侦听

    watchEffect会自动收集所有的依赖,在满足某个条件时执行。默认情况下会立即执行一次

    watchEffect() 的好处相对较小。但是对于有多个依赖项的侦听器来说,使用 watchEffect() 可以消除手动维护依赖列表的负担。此外,如果你需要侦听一个嵌套数据结构中的几个属性,watchEffect() 可能会比深度侦听器更有效,因为它将只跟踪回调中被使用到的属性,而不是递归地跟踪所有的属性。

<div id="app"><select v-model="a.msg"><option value="10">学生</option><option value="12">老师</option><option value="14">教务</option><option value="16">管理员</option></select>{{a}}</div><script type="module">import { createApp, ref, reactive, watch, watchEffect } from '/vue.esm-browser.js'createApp({setup() {const a = reactive({msg: "1",obj: ""})watchEffect(() => {console.log("监听开始");if (a.msg == 10) {console.log("学生");}if (a.msg == 12) {console.log("老师");}if (a.msg == 14) {console.log("教务");}console.log("end");})return {a,}}}).mount("#app")

多源侦听

    根据vue的官方文档,发现watch可以侦听多个数据(数组形式),当这个数组中有一个值发生变化,就会执行一次回调函数。

值得一提的是,y 是一个 ref,所以直接使用 y 而不是 () => y.value。

  const x = ref(0)const y = ref(0)watch([x, y], ([xn, yn], [xo, yo]) => {console.log(`新值${xn},${yn}`);console.log(`旧值${xo},${yo}`);})

 

一次性侦听器

注:该功能仅支持 3.4 及以上版本

每当被侦听源发生变化时,侦听器的回调就会执行。如果希望回调只在源变化时触发一次,可以使用once:true

watch(
  source,
  (newValue, oldValue) => {
    // 当 `source` 变化时,仅触发一次
  },
  { once: true }

const z = reactive({msg: 0})
watch(z, (n, o) => {console.log(n.msg + '---' + o.msg);},{ once: true })

 这样无论侦听源变换多少次,侦听器都只会执行一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/905717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、数据结构与算法(Python版-啃书)-绪论

1.1 计算机问题求解 一般而言&#xff0c;人们需要的不是解决一个具体问题的程序&#xff0c;而是解决一类问题的程序。 对于求平方根这样的简单问题&#xff0c;人们希望的也不是专用于求某个数(例如2)的平方根的函数&#xff0c;而是能求任何数的平方根的函数。 用计算机解…

微信小程序之将轮播图设计为组件

在components文件夹上点右键&#xff0c;新建component&#xff0c;命名为swiper 然后将我们之前的代码都拷贝到对应文件中&#xff0c; 然后我们的页面要引用这个组件&#xff0c; 在pages\index\index.json中引入&#xff1a; { "usingComponents": {"van…

【视频】解决FFmpeg将RTSP转RTMP流时,出现的卡死、出错等问题

【视频】郭老二博文之:图像视频汇总 1、简述 如果不修改图像内容,可以使用FFmpeg命令来将RTSP转RTMP流。 SRS视频服务器就是这么干的,它没有使用FFmpeg接口,而是直接使用FFmpeg命令来转流。 但是在使用中,约到了一些问题,比如转流时卡死、转流出错等等,下面描述怎么解…

报销单业务笔记

文章目录 业务点业务点-对公对私业务点-多系统标志 特殊业务入参入参报文 出参出参报文中间的逻辑多对多关系 其他应该是整体成功还是可以部分成功这种多对多关多关系有没有优雅的判断方式 报销单是个通用场景&#xff0c;有通用逻辑&#xff0c;在此基础上进行适度定制&#x…

25软考【软件评测师】:10天极限冲刺攻略(附知识点解析+冲刺攻略)

距离2025上半年“软件评测师”考试已经只剩最后一周多了&#xff0c;还没有准备好的小伙伴赶紧行动起来。为了帮助大家更好的冲刺学习&#xff0c;特此提供一份考前冲刺攻略。本指南包括考情分析、冲刺攻略两个部分&#xff0c;可以参考此指南进行最后的复习要领&#xff0c;相…

python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

Python logging模块使用指南

Python 的 logging 模块是一个灵活且强大的日志记录工具&#xff0c;广泛应用于应用程序的调试、运行监控和问题排查。它提供了丰富的功能&#xff0c;包括多级日志记录、多种输出方式、灵活的格式配置等。以下是详细介绍&#xff1a; 一、为什么使用 logging 模块&#xff1f;…

开发技术.前端开发相关问题

第一部分 响应式布局 1. 几个布局单位概念 PX: px像素&#xff08;Pixel&#xff09; 相对长度单位。像素px是相对于显示器屏幕分辨率而言的。 PX特点 1. IE无法调整那些使用px作为单位的字体大小&#xff1b; 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体…

1. Go 语言环境安装

&#x1f451; 博主简介&#xff1a;高级开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 人生目标&#xff1a;自由 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文章&#xf…

WPF自定义控件开发全指南:多内容切换与动画集成

WPF自定义控件开发全指南&#xff1a;多内容切换与动画集成 一、控件基础架构设计1.1 选择控件基类1.2 定义关键属性 二、动画系统集成2.1 淡入淡出动画实现2.2 滑动动画实现 三、视觉状态管理四、完整使用示例4.1 XAML声明4.2 动画触发逻辑 五、扩展与优化5.1 性能优化建议5.2…

数据结构 -- 顺序查找和折半查找

查找的基本概念 基本概念 查找&#xff1a;在数据集合中寻找满足某种条件的数据元素的过程 查找表&#xff08;查找结构&#xff09;&#xff1a;用于查找的数据集合称为查找表&#xff0c;它由同一类型的数据结构元素&#xff08;或记录&#xff09;组成 关键字&#xff1…

汽车功能安全--TC3xx MBIST设计要点

英飞凌针对硬件故障的自测&#xff0c;提供了四种机制&#xff1a;PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我们已经聊过了&#xff0c;今天就快速介绍下MBIST。 MBIST&#xff0c;全程Memory Built-in Self Test&#xff0c;用于检测SRAM数据单元的完整性。 在26262…

openpi 入门教程

系列文章目录 目录 系列文章目录 前言 一、运行要求 二、安装 三、模型检查点 3.1 基础模型 3.2 微调模型 四、运行预训练模型的推理 五、在自己的数据上微调基础模型 5.1. 将数据转换为 LeRobot 数据集 5.3. 启动策略服务器并运行推理 5.4 更多示例 六、故障排除…

java加强 -Collection集合

集合是一种容器&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff09;只包含1个值。Collection集合分为两类&#xff0c;List集合与set集合。 特点 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系统中定义了哪些Actor ✅ ThingsBoard Actor 创建机制与作用对照表: Actor 类型 何时创建 由谁创建 是否缓存 作用描述 SystemActor 系统启动时 DefaultActorService / ActorSystem ✅ 是 ★ ThingsBoard 平台服务级别管理器:负责创建所有的Actor AppActor

WPS一旦打开,就会修改默认打开方式,怎么解?

目录 前言 解决方法 结语 前言 电脑上同时存在WPS和微软的Office全家桶&#xff0c;但是我更喜欢用Office全家桶。前几天刚在设置改过来&#xff0c;忘记更改pdf文件打开默认应用。结果没过几天&#xff0c;不小心用WPS打开pdf文件时候&#xff0c;给我把默认设置全改回去了…

深度学习中--模型调试与可视化

第一部分&#xff1a;损失函数与准确率的监控&#xff08;Loss / Accuracy Curve&#xff09; 1. 为什么要监控 Loss 与 Accuracy&#xff1f; Loss 是模型优化的依据&#xff0c;但它可能下降了 Accuracy 反而没变&#xff08;过拟合信号&#xff09; Accuracy 才是评估效果的…

中间件-RocketMQ

RocketMQ 基本架构消息模型消费者消费消息模式顺序消息机制延迟消息批量消息事务消息消息重试最佳实践 基本架构 nameServer: 维护broker列表信息&#xff0c;客户端连接时只需要连接nameServer。可配置成集群。 broker&#xff1a;broker分为master和slave&#xff0c;master负…

anaconda3如何切换虚拟环境

在 Anaconda3 中切换虚拟环境可以通过 命令行 或 Anaconda Navigator 图形界面实现。以下是详细步骤&#xff1a; 方法1&#xff1a;通过命令行切换&#xff08;推荐&#xff09; 1. 查看所有虚拟环境 conda env list # 或 conda info --envs 输出示例&#xff1a; base …

【vue】axios网络请求介绍

一、基础使用 1.引入js文件 2.在methods中的函数里写 axios.get(路径) .then((res))>{ console.log(res.data)&#xff1b;//控制台打印结果数据 this.listArrres.data//定义数组来接收返回来的数据 }&#xff09; 二、参数传递 参数传递一般在路径后面使用 params:{ num:2,…