vue3如何监听reactive对象是哪个属性发生的变化

devtools/2024/12/31 2:01:50/

在 Vue 3 中,如果你想监听 reactive 对象中的某个属性发生的变化,你可以使用 watch 函数进行监听。watch 函数允许你观察 reactive 对象的某个属性或者整个对象,并在变化时执行相应的操作。

1. 监听 reactive 对象的某个属性

如果你只想监听 reactive 对象的某个特定属性,可以直接在 watch 中传入该属性。

javascript">import { reactive, watch } from 'vue';const state = reactive({name: 'John',age: 30,location: 'New York',
});// 监听 name 属性的变化
watch(() => state.name, (newValue, oldValue) => {console.log(`Name changed from ${oldValue} to ${newValue}`);
});

2. 监听整个 reactive 对象并检查是哪一个属性发生了变化

如果你需要监听整个 reactive 对象,并确定到底是哪个属性发生了变化,可以通过对整个对象进行深度监听 (deep: true),然后手动检查哪个属性发生了变化。

javascript">import { reactive, watch } from 'vue';const state = reactive({name: 'John',age: 30,location: 'New York',
});// 监听整个对象的变化
watch(state,(newValue, oldValue) => {for (const key in newValue) {if (newValue[key] !== oldValue[key]) {console.log(`${key} changed from ${oldValue[key]} to ${newValue[key]}`);}}},{ deep: true } // 深度监听
);

3. 监听多个属性

如果你需要监听多个特定的属性,你可以使用多个 watch,或者通过组合使用 computed 进行监听。

javascript">import { reactive, watch } from 'vue';const state = reactive({name: 'John',age: 30,location: 'New York',
});// 监听 name 和 age 属性的变化
watch(() => [state.name, state.age],([newName, newAge], [oldName, oldAge]) => {if (newName !== oldName) {console.log(`Name changed from ${oldName} to ${newName}`);}if (newAge !== oldAge) {console.log(`Age changed from ${oldAge} to ${newAge}`);}}
);

4. 使用 toRefs 进行属性监听

你可以将 reactive 对象的属性转换为 ref,然后使用 watch 监听这些 ref

javascript">import { reactive, toRefs, watch } from 'vue';const state = reactive({name: 'John',age: 30,location: 'New York',
});const { name, age } = toRefs(state);// 监听 name 属性的变化
watch(name, (newValue, oldValue) => {console.log(`Name changed from ${oldValue} to ${newValue}`);
});// 监听 age 属性的变化
watch(age, (newValue, oldValue) => {console.log(`Age changed from ${oldValue} to ${newValue}`);
});

总结

  • 监听单个属性:使用 watch(() => state.name, ...) 监听特定属性的变化。
  • 监听整个对象:使用 watch(state, ...) 并结合 deep: true 深度监听整个对象,并手动检查哪些属性发生了变化。
  • 监听多个属性:可以通过数组或组合 computed 来监听多个属性的变化。
  • 使用 toRefs:将 reactive 对象的属性转换为 ref,然后分别进行监听。

这些方法可以帮助你灵活地监听 reactive 对象中的属性变化,根据实际需求选择合适的方式。


http://www.ppmy.cn/devtools/104992.html

相关文章

Java | Leetcode Java题解之第385题迷你语法分析器

题目: 题解: class Solution {int index 0;public NestedInteger deserialize(String s) {if (s.charAt(index) [) {index;NestedInteger ni new NestedInteger();while (s.charAt(index) ! ]) {ni.add(deserialize(s));if (s.charAt(index) ,) {in…

SQLite3 数据类型深入全面讲解

SQLite3,作为一款轻量级的数据库管理系统,在数据存储方面展现出了其独特的魅力。它不仅支持标准的SQL语法,还提供了丰富的数据类型供开发者选择。这些数据类型不仅涵盖了基本的数值和文本类型,还包括了日期时间、二进制数据等复杂…

产品需求过程管理重要性

产品需求过程管理重要性 背景 以下都是真实事项经历回顾,在产品开发过程中,产品经理与研发团队之间的沟通至关重要。然而,沟通不畅或信息缺失常常导致需求无法准确传达,最终影响产品的成功。以下是一些常见的问题: 1.需…

【Linux】进程|进程的查看与管理|创建进程

目录 1️⃣ 进程的概念(Process) 1.什么是进程? 2.多进程管理 3. 描述进程-PCB 2️⃣ 进程的查看与管理 1.使用指令查看进程 2.通过系统调用函数查看pid 3.杀掉进程 4.ppid(父进程id) 3️⃣ 创建进程 fork(…

基于微信小程序的行李寄存管理系统的设计与实现(论文+源码)_kaic

基于微信小程序的行李寄存管理系统的设计与实现(论文源码)_kaic 摘 要 人们外出旅行的时候,经常会需要到行李寄存的服务。行李寄存处在全国各地都很常见。现存的行李寄存方式很传统,适合小规模的行李寄存,当行李数量较多时,就…

惠中科技RDS环保光伏清洗剂:引领绿色清洁新时代

惠中科技RDS环保光伏清洗剂:引领绿色清洁新时代 在全球光伏产业蓬勃发展的背景下,光伏电站的运维管理面临着前所未有的挑战,其中灰尘累积成为制约发电效率与经济效益的关键因素。为了有效解决这一难题,众多企业和科研机构纷纷投入…

全国大学生数据建模比赛——深度学习

全国大学生数学建模比赛中,深度学习可以成为解决复杂问题的有力手段。 一、深度学习的优势在比赛中的体现 强大的模式识别能力:深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN)&#xff0…

【网络】WebSocket协议详解

WebSocket协议详解 一 、WebSocket 诞生背景二、WebSocket 特点三、WebSocket 的握手环节四、WebSokect 的数据格式1、 第一个字节2、第二个字节3、Masking-key4、playload Data5、一些注意细节 WebSocket 的官方文档 WebSocket 的中文文档(非官方) 一 、WebSocket 诞生背景 在…