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

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 })

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

相关文章:

Vue3——Watch侦听器

目录 手动指定监听对象 侦听ref对象 侦听ref对象中的某个属性 reactive写法 watchEffect 自动侦听 多源侦听 一次性侦听器 watch 是⼀个⽤于观察和响应Vue响应式系统中数据变化的⽅法。它允许你指定⼀个数据源&#xff08;可以是 响应式引⽤、计算属性、组件的属性等&#xf…...

Go的单测gomock及覆盖率命令

安装gomock&#xff1a; go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen 使用 mockgen 生成 mock 代码: 参考 mockgen -sourceservice/user.go -destinationservice/mocks/mock_user_service.go -packagemocks go test -coverprofilecoverage.out…...

Leetcode209做题笔记

力扣209 题目分析&#xff1a;想象一个窗口遍历着这个数组&#xff0c;不断扩大右边界&#xff0c;让r。往窗口中添加数字&#xff1a; 此时我们找到了这个窗口&#xff0c;它的和满足了大于等于target的条件&#xff0c;题目让我求最短的&#xff0c;那么我们就尝试来缩短它&…...

Suna: 开源多面手 AI 代理

GitHub&#xff1a;GitHub - kortix-ai/suna: Suna - Open Source Generalist AI Agent 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Suna 是一个完全开源的 AI 助手&#xff0c;可帮助您轻松完成实际任务。通过自然对话&#xff0c…...

25-05-16计算机网络学习笔记Day1

深入剖析计算机网络&#xff1a;今日学习笔记总结 本系列博客源自作者在大二期末复习计算机网络时所记录笔记&#xff0c;看的视频资料是B站湖科大教书匠的计算机网络微课堂&#xff0c;每篇博客结尾附书写笔记(字丑见谅哈哈) 视频链接地址 一、计算机网络基础概念 &#xf…...

12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建

文章目录 一、如何实现一条用例&#xff0c;实现覆盖所有用例的测试1、结合数据驱动&#xff1a;编辑一条用例&#xff0c;外部导入数据实现循环测试2、用例体&#xff1a;实现不同用例的操作步骤对应的断言 二、实战1、项目路径总览2、common 文件夹下的代码文件3、keywords 文…...

动态IP赋能业务增效:技术解构与实战应用指南

在数字化转型加速的今天&#xff0c;IP地址作为网络通信的基础设施&#xff0c;其技术特性正深刻影响着企业业务架构的效率与安全性。动态IP&#xff08;Dynamic IP&#xff09;作为互联网资源分配的核心机制&#xff0c;早已突破传统认知中的"临时地址"定位&#xf…...

【Java ee初阶】http(1)

HTTP 全称为“超文本传输协议”&#xff0c;由名字可知&#xff0c;这是一个基于文本格式的协议&#xff0c;而TCP&#xff0c;UDP&#xff0c;以太网&#xff0c;IP...都是基于二进制格式的协议。 如何区别该协议是基于哪种格式的协议&#xff1f; 形如这种协议格式&#xf…...

OkHttp用法-Java调用http服务

特点&#xff1a;高性能&#xff0c;支持异步请求&#xff0c;连接池优化 官方文档&#xff1a;提供快速入门指南和高级功能&#xff08;如拦截器、连接池&#xff09;的详细说明&#xff0c;GitHub仓库包含丰富示例。 社区资源&#xff1a;中文教程丰富&#xff0c;GitHub高…...

day18-数据结构引言

一、 概述 数据结构&#xff1a;相互之间存在一种或多种特定关系的数据元素的集合。 1.1 特定关系&#xff1a; 1. 逻辑结构 2.物理结构&#xff08;在内存当中的存储关系&#xff09; 逻辑结构物理结构集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等顺…...

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新&#xff1a;修改了文档说明&#xff0c;优化了项目结构介绍 这是设计师转开发的第一个开源项目&#xff0c;bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站&#xff0c;集成了多种实用工具&#xff0c;包括 AI …...

什么时候可以开始学习深度学习?

咱们先来聊聊机器学习和深度学习的关系~ 这个问题其实挺常见的&#xff0c;之前我也跟不少同事、同学聊过。最近有好几个同学也聊过。 简单说&#xff0c;深度学习是机器学习的一个子集&#xff0c;两者不是并列关系&#xff0c;而是“包含”关系。 你可以这么理解&#xff…...

初学python的我开始Leetcode题8-5

提示&#xff1a;100道LeetCode热题-8-5主要是二叉树相关&#xff0c;包括三题&#xff1a;路径总和 III、二叉树的最近公共祖先、二叉树中的最大路径和。由于初学&#xff0c;所以我的代码部分仅供参考。 前言 二叉树完结撒花~ 下一次的图论会是一些有趣的应用案例~ 提示&am…...

构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践

写在前文&#xff1a;之所以设计这一套流程&#xff0c;是因为 Python在前沿的科技前沿的生态要比Java好&#xff0c;而Java在企业级应用层开发比较活跃&#xff1b; 毕竟许多企业的后端服务、应用程序均采用Java开发&#xff0c;涵盖权限管理、后台应用、缓存机制、中间件集成…...

08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习

本实例主要讲解内容 这个Three.js示例展示了无属性几何体渲染技术&#xff0c;通过WebGL 2的gl_VertexID特性和伪随机数生成算法&#xff0c;在着色器中动态计算顶点位置和颜色&#xff0c;而不需要在CPU端预先定义几何体数据。 核心技术包括&#xff1a; WebGL 2的顶点ID特…...

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…...

转换算子介绍

### 转换算子的定义与用法 #### 定义 转换算子&#xff08;Transformation Operators&#xff09;是指用于处理分布式数据集的操作符&#xff0c;在大数据框架中广泛使用&#xff0c;例如Apache Flink和Apache Spark。这些操作符允许开发者对数据集执行各种变换操作&#xff0…...

Android学习总结之Glide自定义三级缓存(实战篇)

一、为什么需要三级缓存 内存缓存&#xff08;Memory Cache&#xff09; 内存缓存旨在快速显示刚浏览过的图片&#xff0c;例如在滑动列表时来回切换的图片。在 Glide 中&#xff0c;内存缓存使用 LruCache 算法&#xff08;最近最少使用&#xff09;&#xff0c;能自动清理长…...

单片机开发软件

目录 纯编码 vscode Ardunio Keil 1. 集成化开发环境&#xff08;IDE&#xff09; 2. 多架构芯片支持 3. 高效的代码生成与优化 4. 强大的调试与仿真功能 5. 丰富的库函数与生态系统 6. 教育与企业级适用性 典型应用场景 半编码半图形化 STM32CUBEIED 1. 图形化配置…...

LeetCode100.2 字母异位词分组

观察题目&#xff0c;需要把strs中的元素按照字母进行归类&#xff0c;一个朴素的思路是&#xff1a;遍历strs&#xff0c;对每个元素排序后插入哈希表中&#xff0c;随后再遍历一遍表将其转化为vector<vector<string>>。 class Solution { public:vector<vect…...

深入了解 Stable Diffusion:AI 图像生成的奥秘

一、引言 AI 艺术与图像生成技术的兴起改变了我们创造和体验视觉内容的方式。在过去几年里&#xff0c;深度学习模型已经能够创造出令人惊叹的艺术作品&#xff0c;这些作品不仅模仿了人类艺术家的风格&#xff0c;甚至还能创造出前所未有的新风格。在这个领域&#xff0c;Sta…...

Python爬虫实战:研究ajax异步渲染加密

一、引言 在当今数字化时代,数据已成为推动各行业发展的核心驱动力。网络爬虫作为一种高效的数据采集工具,能够从互联网上自动获取大量有价值的信息。然而,随着 Web 技术的不断发展,越来越多的网站采用了 AJAX(Asynchronous JavaScript and XML)异步渲染技术来提升用户体…...

大语言模型训练的两个阶段

先说结论&#xff1a;第一阶段在云平台训练至收敛 第二阶段本地GPU微调 一、阶段划分的核心逻辑 阶段目标资源特点典型耗时占比成本敏感度预训练获取通用表征能力需要大规模分布式计算70-90%高&#xff08;追求每美元算力&#xff09;微调适配特定任务需要领域数据安全/低延迟…...

显示的图标跟UI界面对应不上。

图片跟UI界面不符合。 要找到对应dp的值。UI的dp要跟代码里的xml文件里的dp要对应起来。 蓝湖里设置一个宽度给对应上。然后把对应的值填入xml. 一个屏幕上的图片到底是用topmarin来设置&#xff0c;还是用bottommarin来设置。 因为第一节&#xff0c;5&#xff0c;7 车厢的…...

OJ判题系统第6期之判题逻辑开发——设计思路、实现步骤、代码实现(策略模式)

在看这期之前&#xff0c;建议先看前五期&#xff1a; Java 原生实现代码沙箱&#xff08;OJ判题系统第1期&#xff09;——设计思路、实现步骤、代码实现-CSDN博客 Java 原生实现代码沙箱之Java 程序安全控制&#xff08;OJ判题系统第2期&#xff09;——设计思路、实现步骤…...

css中的 vertical-align与line-height作用详解

一、vertical-align 详解 作用对象&#xff1a;行内元素&#xff08;inline/inline-block&#xff09;或表格单元格内容核心功能&#xff1a;控制元素在行框内的垂直对齐方式常用取值&#xff1a; baseline&#xff08;默认&#xff09;&#xff1a;基线与父元素基线对齐top&a…...

vue数据可视化开发echarts等组件、插件的使用及建议-浅看一下就行

在 Vue 项目中使用 ECharts 进行数据可视化开发时&#xff0c;可以结合 Vue 的响应式特性和 ECharts 的强大功能&#xff0c;实现动态、交互式的图表展示。 一、ECharts 基础使用 1. 安装 ECharts npm install echarts2. 在 Vue 组件中使用 ECharts <template><div…...

高并发内存池(三):TLS无锁访问以及Central Cache结构设计

目录 前言&#xff1a; 一&#xff0c;thread cache线程局部存储的实现 问题引入 概念说明 基本使用 thread cache TLS的实现 二&#xff0c;Central Cache整体的结构框架 大致结构 span结构 span结构的实现 三&#xff0c;Central Cache大致结构的实现 单例模式 thr…...

在Taro中开发一个跨端Svg组件,同时支持小程序、H5、React Native

Taro系列中一直没有跨端的绘图工具&#xff0c;小程序端支持canvas但是不支持svg&#xff0c;RN端有 react-native-svg 支持svg&#xff0c;但是没有很好原生的canvas插件&#xff0c;社区的canvas都是基于WebView实现的&#xff0c;或者skia&#xff0c;这个插件的书写方式和c…...

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面

背景说明&#xff1a; 每次把教学照片上传csdn&#xff0c;都需要打开相册&#xff0c;一张张截图&#xff0c;然后ctrlV黏贴到CSDN内&#xff0c;我觉得太烦了。 改进思路&#xff1a; 是否可以先把所有照片都上传到csdn&#xff0c;然后再一张张的截图&#xff08;去掉幼儿…...