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的响应式系统自动处理变化的检测和回调函数的调用,开发者只需要提供"当这个数据变化时,我想做什么"的具体逻辑即可。

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

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

相关文章

Vue 3 + Koa2 + MySQL 开发和上线部署个人网站

Vue 3 Koa2 MySQL 开发和上线部署个人网站 记录个人的一个操作步骤, 顺序不分先后, 嫌啰嗦请出门右转! 环境说明: 服务器: 阿里云轻量应用服务器 服务器系统: CentOS8.2 本地环境: macOS 12.7.2 Node: 20.10.0 MySQL: 8.0.26 Vue: 3.3.11 Koa: 2.7.0 pm2: 5.3.1 Nginx: 1.1…

CTFshow web(php命令执行 45-49)

基础知识&#xff1a; 1.绕过cat使用&#xff1a; tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev 2.绕过空格用&#xff1a; %09 <> ${IFS} $IFS$ {cat,fl*} %20 注&#xff1a; %09 ##&#xff08;Tab&#xff09; %20 ##&#xff08;spa…

请手写几种js排序算法

什么是排序算法 冒泡排序选择排序插入排序快速排序归并排序&#xff08;Merge Sort&#xff09; 思想实现测试分析动画 快速排序 &#xff08;Quick Sort&#xff09; 思想实现测试分析动画 思考&#xff1a;快排和归并用的都是分治思想&#xff0c;递推公式和递归代码也非常相…

Linux下的socket操作

一、TCP服务端 创建一个TCP服务器的基本操作&#xff1a; 创建一个套接字&#xff08;socket&#xff09;&#xff1a;使用socket函数绑定套接字&#xff08;socket&#xff09;:将套接字绑定到一个特定的IP地址和端口号上&#xff0c;这些信息要用结构体sockaddr_in来保存监…

vue3 之 商城项目—一级分类

整体认识和路由配置 场景&#xff1a;点击哪个分类跳转到对应的路由页面&#xff0c;路由传对应的参数 router/index.js import { createRouter, createWebHashHistory } from vue-router import Layout from /views/Layout/index.vue import Home from /views/Home/index.vu…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架&#xff0c;它无需大量的配置即可运行起来&#xff0c;而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势&#xff0c;可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

Akamai 如何揪出微软 RPC 服务中的漏洞

近日&#xff0c;Akamai研究人员在微软Windows RPC服务中发现了两个重要漏洞&#xff1a;严重程度分值为4.3的CVE-2022-38034&#xff0c;以及分值为8.8的CVE-2022-38045。这些漏洞可以利用设计上的瑕疵&#xff0c;通过缓存机制绕过MS-RPC安全回调。我们已经确认&#xff0c;所…

nodejs+vue高校实验室耗材管理系统_m20vy

用户功能&#xff1a; 登录后要有一个首页 比如:可以看见目前的耗材消耗记录&#xff0c;可做成图表菜单栏在左侧显示 1.个人信息管理 可以对基本信息进行修改&#xff0c;(修改密码时需要验证) 2.耗材管理&#xff08;耗材信息&#xff09; 普通用户可以查询当前相关耗材信息[…

《走进科学》灵异事件:Nginx配置改了之后一直报错

想要安装WoWSimpleRegistration&#xff0c;就定下来要用nginxphp8 &#xff0c;结果nginx那里加上php的支持之后一直报错&#xff1a; $ sudo service nginx restart Job for nginx.service failed because the control process exited with error code. See "systemctl…

问题:银行账号建立以后,一般需要维护哪些设置,不包括() #学习方法#经验分享

问题&#xff1a;银行账号建立以后&#xff0c;一般需要维护哪些设置&#xff0c;不包括&#xff08;&#xff09; A&#xff0e;维护结算科目对照 B&#xff0e;期初余额初始化刷 C&#xff0e;自定义转账定义 D&#xff0e;对账单初始化 参考答案如图所示

VMware17上安装centos7.9

一、下载安装包&#xff1a; 1、VMware安装 VMware 下载地址&#xff1a; https://www.vmware.com/cn/products/workstation-pro.html VMware下载后安装即可 安装教程可以参考VMware安装教程 2、CentOs7.9下载地址&#xff1a; http://mirrors.aliyun.com/centos/7.9.2009/iso…

【flink状态管理(三)】StateBackend的整体设计、StateBackend创建说明

文章目录 一. 状态后端概述二. StateBackend的整体设计1. 核心功能2. StateBackend的UML3. 小结 三. StateBackend的加载与初始化1. StateBackend创建概述2. StateBackend创建过程 一. 状态后端概述 StateBackend作为状态存储后端&#xff0c;提供了创建和获取KeyedStateBacke…

蓝桥杯(Web大学组)2022国赛真题:水果消消乐

思路&#xff1a; 记录点击次数&#xff0c;点击次数为1时&#xff0c;记录点击下标&#xff08;用于隐藏or消除&#xff09;、点击种类&#xff0c;点击次数为2时&#xff0c;判断该下标所对应种类与第一次是否相同 相同&#xff1a;两个都visibility:hidden &#xff08;占…

【数据分享】1929-2023年全球站点的逐月平均风速(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

Redis事务和Redis管道

文章目录 1.Redis事务1.1 Redis事务是什么&#xff0c;能干嘛&#xff1f;1.2 Redis事务和数据库事务的差异1.3 Redis事务的相关命令 2.Redis管道2.1 Redis管道是什么2.2 管道与原生批量命令对比2.3 管道与事务对比2.4 使用管道注意事项 1.Redis事务 1.1 Redis事务是什么&…

ssh和sftp服务分离

目录 一、增加sftp的deamon二、增加sftp的service三、其他配套文件四、修改配置文件五、分别重启两个服务&#xff1a; 由于安全需要&#xff0c;客户这边想把sftp使用的端口与ssh使用的端口分开。 我们知道sftp没有自己的服务器守护进程&#xff0c;它需要依赖sshd守护进程来…

数学建模-灰色预测最强讲义 GM(1,1)原理及Python实现

目录 一、GM&#xff08;1&#xff0c;1&#xff09;模型预测原理 二、GM&#xff08;1&#xff0c;1&#xff09;模型预测步骤 2.1 数据的检验与处理 2.2 建立模型 2.3 检验预测值 三、案例 灰色预测应用场景&#xff1a;时间序列预测 灰色预测的主要特点是模型使用的…

django安装使用

Django 是一个高级的 Python Web 框架&#xff0c;用于构建安全和可维护的网站。以下是如何安装和使用 Django 的步骤。 一&#xff1a;安装 确保你安装了 Python 在 Django 3.x 中&#xff0c;官方支持 Python 3.6, 3.7, 3.8, 3.9, 和 3.10。你可以使用 python --version 或…

扩展说明: 指令微调 Llama 2

这篇博客是一篇来自 Meta AI&#xff0c;关于指令微调 Llama 2 的扩展说明。旨在聚焦构建指令数据集&#xff0c;有了它&#xff0c;我们则可以使用自己的指令来微调 Llama 2 基础模型。 目标是构建一个能够基于输入内容来生成指令的模型。这么做背后的逻辑是&#xff0c;模型如…

基于OpenCV灰度图像转GCode的斜向扫描实现

基于OpenCV灰度图像转GCode的斜向扫描实现基于OpenCV灰度图像转GCode的斜向扫描实现 引言激光雕刻简介OpenCV简介实现步骤 1.导入必要的库2. 读取灰度图像3. 图像预处理4. 生成GCode5. 保存生成的GCode6. 灰度图像斜向扫描代码示例 总结 系列文章 ⭐深入理解G0和G1指令&…