VUE3 监听器(watch)

在 Vue 3 中,监听器(watch)是用来观察响应式数据的变化,并在数据发生变化时执行相应操作的机制。watch 主要用于响应式数据变化时的副作用处理,比如异步操作、数据更新等。

1. 基础使用

在 Vue 3 中,watch 是作为一个组合式 API 提供的,可以在 setup 函数中使用它来监听响应式变量的变化。

<template><div><p>Count: {{ count }}</p><button @click="incrementCount">Increase</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const count = ref(0);// 使用常规函数来监听 countwatch(count, function (newValue, oldValue) {console.log('Count changed from ' + oldValue + ' to ' + newValue);});function incrementCount() {count.value++;}return { count, incrementCount };}
}
</script>

在这个例子中,watch 用来监听 count 变量的变化,当 count 改变时,回调函数会被触发,打印出 count 的旧值和新值。

2. 监听多个变量

watch 也可以监听多个响应式变量,只需要将它们作为数组传递给 watch

<template><div><p>Name: {{ name }}</p><p>Age: {{ age }}</p><button @click="changeName">Change Name</button><button @click="changeAge">Change Age</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const name = ref('Bob');const age = ref(25);// 监听多个变量并使用普通函数watch([name, age], function (newValues, oldValues) {console.log('Name changed from ' + oldValues[0] + ' to ' + newValues[0]);console.log('Age changed from ' + oldValues[1] + ' to ' + newValues[1]);});function changeName() {name.value = 'Alice';}function changeAge() {age.value = 30;}return { name, age, changeName, changeAge };}
}
</script>

这里,watch 监听了 nameage 两个变量,回调函数会在任意一个变量发生变化时触发。

3. 深度监听

有时我们需要监听一个对象或数组的内部变化,而不仅仅是它的引用变化,这时可以使用 deep 选项。

<template><div><p>{{ user }}</p><button @click="user.name = 'Charlie'">Change Name</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const user = ref({ name: 'Alice', age: 30 });// 使用普通函数进行深度监听watch(user, function (newValue, oldValue) {console.log('User changed:', newValue);}, { deep: true });return { user };}
}
</script>

在这个例子中,watch 会监听 user 对象的任何属性变化,甚至是 nameage 字段的内部变化。

4. 立即执行监听器

有时我们希望在组件初始化时就立即执行一次监听器,而不仅仅是在数据发生变化时。可以通过 immediate 选项来实现。

<template><div><p>Message: {{ message }}</p><button @click="message = 'Hello, Vue!'">Change Message</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const message = ref('Welcome');// 使用普通函数并立即执行监听器watch(message, function (newValue, oldValue) {console.log('Message changed from ' + oldValue + ' to ' + newValue);}, { immediate: true });return { message };}
}
</script>

在这个例子中,watch 在组件创建时立即执行一次,输出 message 的初始值。

5. 异步操作

watch 中的回调函数可以是异步的,可以用于异步操作,比如请求数据等。

<template><div><p>Query: {{ query }}</p><button @click="query = 'Vue 3'">Search for Vue 3</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const query = ref('');// 使用普通函数处理异步操作watch(query, function (newQuery) {if (newQuery) {fetch('https://api.example.com/search?q=' + newQuery).then(response => response.json()).then(data => {console.log(data);});}});return { query };}
}
</script>

在这个例子中,当 query 变化时,会发起一个异步请求并打印返回的数据。

6. 停止监听

如果需要停止监听,可以使用 watch 的返回值,它是一个函数,调用该函数可以停止监听。

<template><div><p>Count: {{ count }}</p><button @click="stopWatching">Stop Watching</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const count = ref(0);// 使用普通函数监听 countconst stop = watch(count, function (newValue, oldValue) {console.log('Count changed from ' + oldValue + ' to ' + newValue);});// 停止监听function stopWatching() {stop();  // 停止监听}return { count, stopWatching };}
}
</script>

总结

在 Vue 3 中,watch 作为一个组合式 API 提供了灵活的监听数据变化的能力。你可以:

  • 监听单个或多个响应式变量。
  • 使用 deep 选项监听对象的深层变化。
  • 使用 immediate 选项让监听器立即执行。
  • 处理异步操作。
  • 在需要时停止监听。

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

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

相关文章

CentOS7下Spark-2.4.3-bin-without-hadoop版本安装详细图文教程

1、该Spark版本说明 1、依赖关系 该版本不包含Hadoop的依赖库。适用于那些不直接需要Hadoop集群或者已经通过其他方式管理Hadoop依赖的用户。用户可以在不依赖Hadoop的环境中运行Spark&#xff0c;或者如果已有一个Hadoop环境但希望使用Spark自带的Hadoop客户端库&#xff0c;…

论文解析 | 基于语言模型的自主代理调查

论文 《A Survey on Large Language Model-based Autonomous Agents》 对基于大型语言模型&#xff08;LLM&#xff09;的自主智能体&#xff08;Autonomous Agents&#xff09;进行了全面调查。随着大型语言模型&#xff08;如 GPT 系列、BERT、T5 等&#xff09;的快速发展&a…

VSCode MAC CPP运行环境配置

使用vscode运行cpp确实挺麻烦的&#xff0c;需要配置几个文件&#xff0c;简单来说&#xff1a; c_cpp_properties.json 用来配置编译器和编译选项launch.json 用来配置运行时选项tasks.json 用来配置debug选项 .vscode/c_cpp_properties.json {"configurations":…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言&#xff1a;AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中&#xff0c;企业对于智能化应用的需求日益增长。然而&#xff0c;传统的数据应用开发方式面临着诸多挑战&#xff0c;如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

网络安全 | 什么是CC攻击防护?

关注&#xff1a;CodingTechWork CC攻击的介绍 CC攻击&#xff08;Challenge Collapsar Attack&#xff09;是一种针对Web应用程序的攻击方式&#xff0c;通常被称为“网站的拒绝服务攻击”&#xff08;DDoS&#xff09;&#xff0c;主要通过大量伪造的HTTP请求来消耗服务器资…

docker run一个镜像如何指定最大可使用的内存大小、cpu大小

在 Docker 中&#xff0c;你可以通过 --memory 和 --cpus 参数来指定容器的最大内存和 CPU 限制。这样可以确保容器不会超出特定的资源限制&#xff0c;从而避免影响主机的其他进程。 1. 限制内存&#xff08;--memory&#xff09; 通过 --memory 或 -m 参数&#xff0c;你可…

centos9设置静态ip

CentOS 9 默认使用 NetworkManager 管理网络&#xff0c;而nmcli是 NetworkManager 命令行接口的缩写&#xff0c;是一个用来进行网络配置、管理网络连接的命令工具&#xff0c;可以简化网络设置&#xff0c;尤其是在无头&#xff08;没有图形界面&#xff09;环境下。 1、 cd…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

Linux之读者写者模型与特殊锁的学习

目录 读者写者模型 特殊锁 悲观锁 自旋锁 在前几期&#xff0c;我们学习了多线程的生产者和消费者模型&#xff0c;生产者和消费者模型中&#xff0c;有三种关系&#xff0c;两个角色&#xff0c;一个场所&#xff0c;那么读者写者模型和生产者消费者模型有什么关联吗&…

mycat介绍与操作步骤

文章目录 1.分库分表2.mycat 入门2.1 概述2.2 案例&#xff1a;水平分表1&#xff09;准备工作2&#xff09;配置3&#xff09;启动并测试 3.mycat 配置详解3.1 schema.xml3.2 rule.xml3.3 server.xml 4.mycat 分片&#xff1a;垂直拆分1&#xff09;准备工作2&#xff09;配置…

OSPF - 特殊报文与ospf的机制

&#x1f460;1 携带FA地址的5类LSA 除去7类转5类的LSA会携带FA地址&#xff0c;还有一种情况会有FA地址 FA地址:forwarding address 转发地址&#xff0c;解决次优路径&#xff0c;避免环路5类LSA FA地址不为0&#xff0c;则直接通过FA地址去往目标网段 FA地址为0&#xff0c…

django基于Python的电影推荐系统

Django 基于 Python 的电影推荐系统 一、系统概述 Django 基于 Python 的电影推荐系统是一款利用 Django 框架开发的智能化应用程序&#xff0c;旨在为电影爱好者提供个性化的电影推荐服务。该系统通过收集和分析用户的观影历史、评分数据、电影的属性信息&#xff08;如类型…

C语言基本知识复习浓缩版:控制语句--循环

C语言基本知识复习浓缩版&#xff1a;控制语句--循环 三种基本循环结构 while do-while循环 for循环 while while(条件) { //循环 } 当条件为真时&#xff0c;循环会一直执行 当条件为假时&#xff0c;循环停止 注意点&#xff1a;如果初始条件为假&#xff0c;循环体一次…

初识verilog HDL

为什么选择用Verilog HDL开发FPGA&#xff1f;&#xff1f;&#xff1f; 硬件描述语言&#xff08;Hardware Descriptipon Lagnuage&#xff0c;HDL&#xff09;通过硬件的方式来产生与之对应的真实的硬件电路&#xff0c;最终实现所设计的预期功能&#xff0c;其设计方法与软件…

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…

【算法C++】数字分组求偶数和

问题描述 小M面对一组从 1 到 9 的数字&#xff0c;这些数字被分成多个小组&#xff0c;并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 numbers: 一个由多个整数字符串组…

如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目

Yarn Workspaces是Yarn提供的一种依赖管理机制&#xff0c;它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目&#xff0c;能够减少重复依赖&#xff0c;加快依赖安装速度&#xff0c;并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…

附加共享数据库( ATTACH DATABASE)的使用场景

附加共享数据库&#xff08;使用 ATTACH DATABASE&#xff09;的功能非常实用&#xff0c;通常会在以下几种场景下需要用到&#xff1a; 1. 跨数据库查询和分析 场景&#xff1a; 你的公司有两个独立的数据库&#xff1a; 一个存储了学生信息 (school.db)一个存储了员工信息 …

阿里云ios镜像源

阿里云镜像源&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载centos7

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…