Vue 3 中的 watch 函数:实战指南

Vue.js 是一个功能丰富的前端框架,它允许开发者以声明式的方式创建动态和反应式的用户界面。Vue 3 引入的 Composition API 增强了代码的组织和复用,其中 watch 函数是一个非常有用的特性。本文将通过一系列的示例,展示如何在 Vue 3 应用程序中使用 watch 函数来监控数据变化。

监控响应式引用(ref

响应式引用是 Vue 3 中最基本的响应式特性之一。下面的例子演示了如何监控一个响应式引用的变化:

import { ref, watch } from 'vue';export default {setup() {const count = ref(0);watch(count, (newCount, oldCount) => {console.log(`Count changed from ${oldCount} to ${newCount}`);if (newCount === 10) {alert('Count reached 10!');}});return { count };}
};

在这个例子中,每当 count 的值变化时,watch 回调就会执行,并打印出新旧值。

监控响应式对象(reactive

reactive 提供了一个更复杂的响应式状态管理。下面的例子展示了如何监控一个响应式对象的属性变化:

import { reactive, watch } from 'vue';export default {setup() {const state = reactive({firstName: 'John',lastName: 'Doe'});watch(() => state.firstName, (newFirstName, oldFirstName) => {console.log(`First name changed from ${oldFirstName} to ${newFirstName}`);});watch(() => state.lastName, (newLastName, oldLastName) => {console.log(`Last name changed from ${oldLastName} to ${newLastName}`);});return { state };}
};

这个例子中,我们分别监控了 firstNamelastName 属性的变化,并在它们变化时执行回调。

监控计算属性(computed

计算属性是基于它们的响应式依赖进行缓存的。下面的例子展示了如何监控一个计算属性的变化:

import { ref, computed, watch } from 'vue';export default {setup() {const firstName = ref('John');const lastName = ref('Doe');const fullName = computed(() => `${firstName.value} ${lastName.value}`);watch(fullName, (newFullName, oldFullName) => {console.log(`Full name changed from ${oldFullName} to ${newFullName}`);});return { firstName, lastName, fullName };}
};

在这个例子中,fullName 是一个计算属性,它的值是基于 firstNamelastName 的。当这些依赖变化时,fullName 也会更新,触发 watch 回调。

监控多个数据源

Vue 3 的 watch 也可以同时监控多个数据源。下面的例子展示了如何同时监控多个响应式引用:

import { ref, watch } from 'vue';export default {setup() {const width = ref(window.innerWidth);const height = ref(window.innerHeight);watch([width, height], ([newWidth, newHeight], [oldWidth, oldHeight]) => {console.log(`Window size changed from ${oldWidth}x${oldHeight} to ${newWidth}x${newHeight}`);});return { width, height };}
};

这个例子中,我们监控了窗口的 widthheight,并在它们变化时打印出新旧尺寸。

使用 watchimmediatedeep 选项

watch 函数还接受一个配置对象,其中 immediatedeep 选项允许你更精细地控制监控行为:

import { ref, watch } from 'vue';export default {setup() {const userProfile = ref({name: 'Alice',preferences: {theme: 'light'}});// 使用 `deep` 选项来深度监控对象内部的变化watch(userProfile, (newProfile, oldProfile) => {console.log('User profile changed!');}, { deep: true });// 使用 `immediate` 选项立即触发回调watch(userProfile, (newProfile, oldProfile) => {console.log('This runs immediately and whenever userProfile changes!');}, { immediate: true });return { userProfile };}
};

在这个例子中,deep 选项允许我们监控 userProfile 对象内部的变化,而 immediate 选项确保了在监控设置之后立即触发一次回调。

结论

Vue 3 的 watch 函数提供了一个强大的接口来响应数据的变化。通过上面的例子,我们看到了如何在不同场景下使用 watch 来监控响应式引用、响应式对象、计算属性以及多个数据源。记住,要谨慎使用 watch,避免不必要的性能开销,并合理利用 immediatedeep 选项来满足特定的需求。

希望这篇文章能够帮助你更好地理解和利用 Vue 3 中的 watch 函数,为你的应用带来更多的动态和响应式特性。祝你在 Vue 3 的世界里编程愉快!

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

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

相关文章

全国计算机等级考试| 二级Python | 真题及解析(4)

一、选择题 1.以下对 Python 程序缩进格式描述错误的选项是( ) A.不需要缩进的代码顶行写,前面不能留空白 B.缩进可以用 tab 键实现,也可以用多个空格实现 C.严格的缩进可以约束程序结构,可以多层缩进 D.缩进是用来格式美化 Python 程序的 2.下列Python程…

电话号码查询系统的设计与实现(txt存储版本)

实验项目名称: 电话号码查询系统的设计与实现 实验目的与要求: 1.基础知识: (1)掌握数据结构中的查找、排序等算法相关知识。 (2)掌握 C 或 C语言中程序设计的方法。 2.程序功能: (1)自选存储结构(顺序表或哈希…

阶段十-分布式-任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其…

感知与认知的碰撞,大模型时代的智能文档处理范式

目录 0 写在前面1 GPT4-V:拓宽文档认知边界2 大语言模型的文档感知缺陷3 大一统文档图像处理范式3.1 像素级OCR任务3.2 OCR大一统模型3.3 长文档理解与应用 4 总结抽奖福利 0 写在前面 由中国图象图形学学会青年工作委员会发起的第十九届中国图象图形学学会青年科学…

二叉排序树的创建、插入、查找和删除【数据结构】

二叉排序树 若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。它的左、右树又分为⼆叉排序树 二叉排序树也叫二叉查找树、二叉搜索树 二叉排序树的创建、插入、查找和删除 …

015、控制流运算符match

1. 控制流运算符match Rust中有一个异常强大的控制流运算符:match,它允许将一个值与一系列的模式相比较,并根据匹配的模式执行相应代码。模式可由字面量、变量名、通配符和许多其他东西组成;后文会详细介绍所有不同种类的模式及它…

MySQL中的事务, 特性及应用

事务 1 )概述 只有 innodb 引擎支持事务,myisam 是不支持的事务的本质是原子性操作,不可分割,打包多个操作成为一个原子 2 )事务的四大特性(ACID) 原子性 Atomicity 原子性是指事务包含的所有操作不可分割要成功一…

ElasticSearch使用Grafana监控服务状态-Docker版

文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch:7.14.2 elasticsearch_exporter:1.7.0(latest) 下载地址:http…

C++ 基础知识体系

一,C基础知识体系 基于自己的编程经验搭建的C知识体系 宏声明与定义函数 函数重载函数指针内敛函数默认参数函数对象 面向对象 面向对象与面向过程的区别封装 数据成员成员方法静态成员 继承 单继承多继承虚继承菱形继承 多态 虚函数纯虚函数抽象类 五大原则 单一职…

如何使用 Python+selenium 进行 web 自动化测试?

Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击、输入、选择等等。它支持多种浏览器,包括Chrome、Firefox、Safari等等,并且可以在多个平台上运行。 安装和配置Selenium 在使用Selenium之前,…

【VTK三维重建-体绘制】第五期 vtkLODProp3D

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK中体绘制中的vtkLODProp3D对象,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞…

机器学习中异常值的处理方式

背景 3Sigma、Z-Score、box plot、Grubbs假设检验四种分布异常值检验方法可以帮助在数据中识别异常值,而在机器学习中,异常值的检测对模型性能和结果的准确性具有重要影响。 3 Sigma法: 原理:通过计算数据的均值和标准差&#xff…

力扣labuladong——一刷day84

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣743. 网络延迟时间 前言 Dijkstra 算法(一般音译成迪杰斯特拉算法)无非就是一个 BFS 算法的加强版,它们都是从二叉…

(Java企业 / 公司项目)Nacos的怎么搭建多环境配置?(含相关面试题)(二)

上一篇讲了一个单体服务中配置,传统的Nacos配置但是在微服务架构当中肯定都是多环境下配置,比如生产环境,dev测试环境等等。 第一种方式模拟开始: 首先展示在生产环境中nacos如何配置,在模块下新建一个配置文件&…

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。 达梦数…

本地站点通过主备冗余专线连接上云

本地站点通过主备冗余专线连接上云 您可以使用两条物理专线以主备方式将本地数据中心IDC(Internet Data Center)接入阿里云。采用主备接入方式时,正常情况下仅主用线路在进行流量转发。阿里云按照您配置的健康检查的发包时间间隔探测主用线路…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网(亲测非必须,可加快响应速度)访问Discord官方网址:https://discord.com 选择“在您的浏览器中打开Discord” 然后,注册帐号、购买套餐等,在此不做缀述。…

uniapp+echarts开发APP版本教程

需求 需要在uniappecharts展示图表功能,是APP版本,不是小程序。找了好多教程都乱七八糟的,无法实现。以下是效果图 教程 1、安装插件 HBuilder安装echarts插件,插件地址如下。安装完成后在uni_modules/lime-echart文件夹下 ht…

12.2 【Screen配置】khronos模块配置

一,khronos配置配置简介 khronos部分的配置用于指定与Khronos相关的库和参数(例如EGL和WFD库)。 在graphics.conf配置文件中,khronos部分指定GPU和显示驱动程序。只有在系统需要这两种类型的驱动程序之一或两者时,才需要在配置文件中包含此部分。khronos部分由begin khr…

使用169.254开头的IP地址

介绍: 在计算机网络中,当设备无法通过DHCP服务器获取有效的IP地址时,它会尝试使用自动私有IP地址(APIPA)来分配一个本地链接的IP地址。APIPA地址范围从169.254.0.1到169.254.255.254。这篇文档将介绍关于使用以169.254…