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

vue-cil的watch函数详解

在Vue中,watch是一个非常有用的API,用于侦听一个响应式引用(例如由ref创建)或响应式对象(由reactive创建)的属性,并在值变化时执行回调函数。Vue 3的Composition API引入了这种侦听方式,让组件逻辑的组织更加灵活。

以提供的代码片段为例:

watch(checked, xxxx)

这里,watch函数接受两个参数:

  1. 第一个参数是要侦听的目标。它可以是一个响应式引用(ref)或是响应式对象的某个属性。在您的示例中,侦听的目标是checked,它很可能是通过ref创建的一个响应式引用,用于追踪某个特定的值(在这个场景下,很可能是一个开关的状态)。

  2. 第二个参数 (xxxx) 应该是一个回调函数,当第一个参数所指向的值改变时,这个回调函数将被调用。函数通常接收两个参数:newValueoldValue,分别表示变化后的新值和变化前的旧值。在您的watch示例中,由于未指定具体的回调函数,用xxxx代替,这意味着您应该在此处提供一个具体的函数来处理值的变化。

例如,如果要侦听checked的变化,并在每次变化时打印新旧值,可以这样写:

watch(checked, (newValue, oldValue) => {console.log(`checked从${oldValue}变为${newValue}`);
});

附加选项

watch函数还支持接受一个附加参数,通常是一个对象,通过这个对象可以提供一些额外的选项。比如:

  • immediate: 是否立即以当前的值执行回调函数,而不是等到值变化时才执行。
  • deep: 在侦听一个对象时,是否深度侦听内部属性的变化。

例如:

watch(checked, (newValue, oldValue) => {console.log(`checked从${oldValue}变为${newValue}`);
}, {immediate: true,deep: false
});

在这个例子中,如果immediate设置为true,那么回调函数会立即执行一次,使用checked的当前值作为newValue,而oldValue会是undefined

综上,watch是Vue Composition API中非常强大的一个特性,它使状态变化的侦听和处理变得简单高效。
我们将通过一个具体的示例来详细说明watch函数如何工作,以及当checked值发生变化时,它的执行步骤和过程:

1.首先,假设我们在Vue 3的组件中有一个名为checked的响应式数据,它通过ref来创建,并且初始值为false。它可能代表一个开关组件(比如一个UI开关)的状态。

import { ref, watch } from 'vue';const checked = ref(false);

2.接着,我们使用watch来侦听checked的变化。当checked的值发生变化时,我们将通过控制台日志输出旧值和新值。

watch(checked, (newValue, oldValue) => {console.log(`checked从${oldValue}变为${newValue}`);
});

现在,让我们来模拟checked值的变化过程以及watch函数的执行步骤:

  1. 初始状态: checked的值为false

  2. 状态变化 - 第一次改变: 如果在某个事件(例如用户点击了一个开关按钮)中我们将checked的值设置为truewatch侦听器将检测到这个变化。

    • newValue将是改变后的值true,而oldValue将是变化前的值false
    • 控制台将输出:checked从false变为true
  3. 状态变化 - 第二次改变: 如果用户再次点击开关将其关闭,我们设置checked的值回false

    • 这次,newValuefalseoldValuetrue
    • 控制台再次输出,反映这次变化:checked从true变为false

执行过程:

  • 当调用watch函数时,Vue.js会注册一个侦听器,用于监视checked值的任何变化。
  • checked的值发生变化时,Vue.js会自动调用watch函数中提供的回调函数。
  • 在回调函数内,newValue参数代表变化后的新值,而oldValue参数代表变化前的旧值。
  • 通过console.log,我们可以看到每次变化的具体信息输出到控制台。

最后结果:

每当checked改变时,你将在开发者控制台看到相应的日志输出,这个输出展示了checked值从一个状态变化到另一个状态的过程,从而帮助开发者追踪和调试程序。

这种watch侦听机制非常有助于在构建响应式Web应用时,对状态变化进行管理和响应。

回调函数是一种在编程中广泛使用的概念,特别是在处理异步操作如事件监听、服务器请求、文件读写等场景中。简单来说,回调函数是一个被作为参数传递给另一个函数,并且这个回调函数在那个函数执行完之后被调用的函数。

在JavaScript或Vue中,回调函数的工作机制允许我们在某些操作完成时执行特定的代码,而不需要立即执行。这对于需要等待某些事件发生或等待异步操作完成的情况尤其有用,例如等待用户操作、数据请求返回结果等。

在提到的watch函数中的用法中:

watch(checked, (newValue, oldValue) => {console.log(`checked从${oldValue}变为${newValue}`);
});
  • checked是一个响应式引用(ref),Vue 使用响应式系统跟踪其变化。
  • checked的值变化时,Vue 的响应式系统会注意到这一点,并自动调用watch函数中提供的回调函数。
  • Vue的内部机制负责将变化之后的值和之前的值分别作为newValueoldValue传给回调函数。

这里的关键是Vue的响应式系统如何追踪和通知值的变化:

  1. 追踪变化:当你通过ref函数创建一个响应式引用时,Vue 内部使用了Proxy等技术来包装这个值,从而能够追踪对它的访问和修改。
  2. 依赖收集:当watch函数被调用并注册了回调函数时,Vue会将这个回调函数记为checked的一个"依赖"。这意味着,每当checked变化时,所有注册到它的"依赖"(在这个例子中就是我们的回调函数)都会被通知。
  3. 触发更新:一旦checked的值发生变化,Vue 就会调用回调函数,同时将新值和旧值作为参数传递给它。这就是回调函数能够接收到newValueoldValue的原因。

这种模式非常强大,因为它允许开发者在不必关心如何检测变化和手动调度回调执行的情况下,很容易地响应数据的变化。简而言之,Vue的响应式系统自动处理变化的检测和回调函数的调用,开发者只需要提供"当这个数据变化时,我想做什么"的具体逻辑即可。

相关文章:

vue-cil的watch函数详解

在Vue中,watch是一个非常有用的API,用于侦听一个响应式引用(例如由ref创建)或响应式对象(由reactive创建)的属性,并在值变化时执行回调函数。Vue 3的Composition API引入了这种侦听方式&#xf…...

堆排及时间复杂度分析

箴言: 初始阶段,不需要去纠结那一种更优美,非要找出那一种是最好的,其实能解决问题的就是好办法。 一,常见排序时间复杂度 冒泡快排归并堆排桶排时间O(n^2)O(nlogn)O(nlogn)O(nlogn)kn空间O(1)O(1)O(nlogn)O(1)kn 二&#xff…...

数据结构:双向链表

文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是&#xf…...

51单片机之数码管显示表白数字篇

朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L…...

代码随想录算法训练营DAY16 | 二叉树 (3)

一、LeetCode 104 二叉树的最大深度 题目链接:104.二叉树的最大深度https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 思路:采用后序遍历递归求解。 class Solution {int ans 0;public int maxDepth(TreeNode root) {if(root null){retur…...

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统

springboot(ssm大学生计算机基础网络教学系统 在线课程系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mys…...

前端架构: 脚手架的开发流程和常用框架

脚手架的开发流程 脚手架的创建 $ npm init 脚手架的开发 分包 分包是指当我们一个脚手架比较复杂的时候,不可能把所有的js代码全部写在一个脚手架当中势必会把它建很多的不同的模块 package,通常我们会把它称之为一个分包的过程会和实际的这个项目一样…...

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分,属于理论章节。如果你比较着急可以跳过。但作者不建议跳过,因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架,所以它必须是一个可以部署在多台计算机上…...

mysql 对于null字段排序处理

最近遇到一个需求 ,需要对一个报表的多个字段进行多字段复杂条件排序 排序字段为NULL时 Mysql对于排序字段为NULL时,有自身默认的排序规则,默认是认为null 值 是无穷小 ELECT id,script_id,last_modified,live_count,next_show FROM virtua…...

NLP_语言模型的雏形 N-Gram 模型

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数,也就是词频3.为了得到一个词在给定上下文中出现的概率,我们可以利用条件概率公式计算。具体来讲,就是计算给定前N-1个词时&#xff0…...

mac电脑flutter环境配置,解决疑难问题

准备工作 首先搭建flutter的环境需要使用到flutter的sdk,可以直接跳去官网下载:Choose your first type of app - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter,下载时要注意你电脑所使用的芯片是Intel的还是苹果的芯片。 下载好的…...

C++ bool 布尔类型

在C 中 bool类型占用1个字节长度,bool 类型只有两个取值,true 和 false,true 表示“真”,false 表示“假”。 需要注意的C中使用cout 打印的时候是没有true 和 false 的 只有0和1 ,这里0表示假,非0表示真 …...

DC-7靶机渗透详细流程

信息收集: 1.存活扫描: 由于靶机和kali都是nat的网卡,都在一个网段,我们用arp-scan会快一点: arp-scan arp-scan -I eth0 -l └─# arp-scan -I eth0 -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:dd:ee:6…...

提速MySQL:数据库性能加速策略全解析

提速MySQL:数据库性能加速策略全解析 引言理解MySQL性能指标监控和评估性能指标索引优化技巧索引优化实战案例 查询优化实战查询优化案例分析 存储引擎优化InnoDB vs MyISAM选择和优化存储引擎存储引擎优化实例 配置调整与系统优化配置调整系统优化优化实例 实战案例…...

Flink实战六_直播礼物统计

接上文:Flink实战五_状态机制 1、需求背景 现在网络直播平台非常火爆,在斗鱼这样的网络直播间,经常可以看到这样的总榜排名,体现了主播的人气值。 人气值计算规则:用户发送1条弹幕互动,赠送1个荧光棒免费…...

Compose | UI组件(十五) | Scaffold - 脚手架

文章目录 前言一、Scaffold脚手架简介二、Scaffold的主要组件三、如何使用Scaffold四、Compose中Scaffold脚手架的具体例子例子1:基本Scaffold布局例子2:带有Drawer的Scaffold布局例子3:带有Snackbar的Scaffold布局 总结 前言 Compose中的Sca…...

Vue-60、Vue技术router-link的replace属性

1、作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2、浏览器的历史记录有两种写入方式&#xff1a;分别是push和replace,push是追加历史记录&#xff0c;replace是替换当前记录。路由跳转时候默认为push 3、如何开启replace模式&#xff1a; <router-link rep…...

Hive与Presto中的列转行区别

Hive与Presto列转行的区别 1、背景描述2、Hive/Spark列转行3、Presto列转行 1、背景描述 在处理数据时&#xff0c;我们经常会遇到一个字段存储多个值&#xff0c;这时需要把一行数据转换为多行数据&#xff0c;形成标准的结构化数据 例如&#xff0c;将下面的两列数据并列转换…...

探讨CSDN等级制度:博客等级、原力等级、创作者等级

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…...

2.8作业

sqlite3数据库操作接口详细整理&#xff0c;以及常用的数据库语句 头文件&#xff1a; #include <sqlite3.h> 编译时候要加上-lsqlite3 gcc a.c -lsqlite3 1&#xff09;sqlite3_open 打开一个数据库&#xff0c;如果数据库不存在&#xff0c;则创建一个数据库 2&am…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...