watch方法在vue3setup中的应用

embedded/2025/3/21 20:56:27/

在 Vue 3 的 <script setup> 语法糖中,watch 方法用于响应式地追踪一个或多个数据源,并在数据源发生变化时执行回调函数。下面为你详细介绍 watch 方法的不同应用场景。
1. 监听单个响应式数据
当你需要监听一个响应式数据(如 ref 或 reactive 创建的数据)的变化时,可以使用 watch 方法。

<template><div><input v-model="count" type="number" /><p>当前计数: {{ count }}</p></div>
</template><script setup>
import { ref, watch } from 'vue';const count = ref(0);// 监听 count 的变化
watch(count, (newValue, oldValue) => {console.log(`计数从 ${oldValue} 变为 ${newValue}`);
});
</script>

代码解释
count 是一个由 ref 创建的响应式数据。
watch 方法接收两个参数:第一个参数是要监听的数据源,这里是 count;第二个参数是回调函数,当 count 的值发生变化时,该回调函数会被调用,并且会传入新值和旧值。

2. 监听多个响应式数据
watch 方法也可以同时监听多个响应式数据。

<template><div><input v-model="firstName" type="text" /><input v-model="lastName" type="text" /><p>全名: {{ fullName }}</p></div>
</template><script setup>
import { ref, watch, computed } from 'vue';const firstName = ref('');
const lastName = ref('');
const fullName = computed(() => `${firstName.value} ${lastName.value}`);// 监听 firstName 和 lastName 的变化
watch([firstName, lastName], ([newFirstName, newLastName], [oldFirstName, oldLastName]) => {console.log(`名字从 ${oldFirstName} ${oldLastName} 变为 ${newFirstName} ${newLastName}`);
});
</script>

代码解释
watch 方法的第一个参数可以是一个数组,用于同时监听多个数据源。
回调函数的第一个参数是新值数组,第二个参数是旧值数组,它们的顺序与监听的数据源顺序一致。
3. 监听对象属性
如果你需要监听一个对象的某个属性的变化,可以使用一个 getter 函数作为 watch 的第一个参数

<template><div><input v-model="user.name" type="text" /><p>用户名: {{ user.name }}</p></div>
</template><script setup>
import { reactive, watch } from 'vue';const user = reactive({name: 'John',age: 30
});// 监听 user.name 的变化
watch(() => user.name, (newName, oldName) => {console.log(`用户名从 ${oldName} 变为 ${newName}`);
});
</script>

代码解释
watch 方法的第一个参数是一个 getter 函数,该函数返回要监听的属性值。
当 user.name 的值发生变化时,回调函数会被调用。
4. 深度监听
如果你需要监听一个对象的所有属性的变化,可以使用 deep 选项

<template><div><input v-model="user.name" type="text" /><input v-model="user.age" type="number" /><p>用户名: {{ user.name }}, 年龄: {{ user.age }}</p></div>
</template><script setup>
import { reactive, watch } from 'vue';const user = reactive({name: 'John',age: 30
});// 深度监听 user 对象的所有属性的变化
watch(() => user,(newUser, oldUser) => {console.log('用户信息发生了变化');},{ deep: true }
);
</script>

代码解释
watch 方法的第三个参数是一个选项对象,通过设置 deep: true 可以开启深度监听。
当 user 对象的任何属性发生变化时,回调函数都会被调用。
5. 立即执行回调
如果你希望在 watch 初始化时立即执行一次回调函数,可以使用 immediate 选项。

<template><div><input v-model="count" type="number" /><p>当前计数: {{ count }}</p></div>
</template><script setup>
import { ref, watch } from 'vue';const count = ref(0);// 立即执行回调函数
watch(count,(newValue, oldValue) => {console.log(`计数从 ${oldValue} 变为 ${newValue}`);},{ immediate: true }
);
</script>

代码解释
通过设置 immediate: true,回调函数会在 watch 初始化时立即执行一次,此时 oldValue 为 undefined。
以上就是 watch 方法在 Vue 3 <script setup> 中的常见应用场景。


http://www.ppmy.cn/embedded/174520.html

相关文章

数据挖掘:第二章、认识数据

第二章 认识数据 2.1 数据类型与统计汇总 数据集与数据对象 一个数据集由多个数据对象组成&#xff0c;每个数据对象代表一个实体。例如&#xff0c;在销售数据库中&#xff0c;数据对象可以是客户、商品、销售额等&#xff1b;在医疗数据库中&#xff0c;数据对象可以是患者…

学习threejs,使用MeshLambertMaterial漫反射材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshLambertMaterial…

【智能体】| 知识库、RAG概念区分以及智能体是什么

文章目录 前言简介大模型“幻觉”问题如何解决“幻觉”问题&#xff1f; RAG、智能体、RAG智能体概念什么是检索增强型生成&#xff08;RAG&#xff09;模拟简单的RAG场景 AI系统中的智能体是什么什么是Agentic RAG&#xff1f;Agentic RAG如何工作&#xff1f;Agentic RAG架构…

springboot+mysql增删改查

说明&#xff1a;springbootmysql增删改查 step1:create language: javatype: gradle-groovyjdk:21java:21packaging: jardeveloper tools:lombokweb: spring webtemplate engines:thymelafsql:spring data jpa,spring data jdbc,mysql driveri/o:validationstep2:sql -- …

蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形

完整题目可查看&#xff1a; 转动的图形_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5106.html?_shareid3 程序演示可查看&#xff1a; 转动的图形-scratch作品-少儿编程题库学习中心-嗨信奥https://www.hixinao.com/scratch/creation…

批量删除 PPT 中的所有图片、某张指定图片或者所有二维码图片

PPT 文档中的图片如何删除呢&#xff1f;相信很多小伙伴或碰到类似的需求。比如我们需要删除 PPT 文档中的某一张图片或者某张二维码图片&#xff0c;如果每一页都有这张图片&#xff0c;或者有很多 ppt 都有同一张要删除的图片&#xff0c;我们应该怎么快速的完成删除呢&#…

产品战略之科学定价策略与模型(104页PPT)(文末有下载方式)

产品战略之科学定价策略与模型&#xff08;104页PPT&#xff09;详细解读 详细资料请看本解读文章的最后内容。 在当今竞争激烈的市场环境中&#xff0c;科学定价策略是企业成功的关键之一。本文将对《产品战略之科学定价策略与模型》进行详细解读&#xff0c;帮助读者深入理…

微服务即时通信系统---(九)消息转发子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 服务代码实现 数据管理 MySQL(聊天会话成员管理) chatSessionMember.hxx(ODB文件编写) 客户端操作编写(mysqlChatSessionMemberTable.hpp) 编写proto文件 消息元信息 消息转发proto 发送新消息 R…