当前位置: 首页 > news >正文

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

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

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

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

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),然后手动检查哪个属性发生了变化。

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 进行监听。

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

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.mrgr.cn/news/14831.html

相关文章:

  • 11.舵机控制
  • Gitlab迁移到新的服务器后点击Integrations报500错误的解决方法
  • 第8章 Android数据存储与I/O
  • 【C#】【EXCEL】Bumblebee/Classes/ExWorksheet.cs
  • 【附源码】Python :三棱锥建模
  • IO进程线程 0828作业
  • Threejs之WebGLRenderer渲染器
  • InstantID: Zero-shot Identity-Preserving Generation in Seconds
  • 【leetcode】C++_string 917.仅仅反转字母
  • PyTest测试框架学习日记
  • 【SQL】关注者数量
  • 单片机的主流编程语言是什么
  • 学习大数据DAY43 Sqoop 安装,配置环境和使用
  • Leetcode 216.组合总和Ⅲ 回溯+剪枝 C++实现
  • k8s集群环境搭建(一主二从--kubeadm安装)
  • 分享5款支持论文写作网站先稿后付的网站!
  • [000-01-001].第04节:Shell中的内置命令
  • Android架构组件:MVVM模式的实战应用与数据绑定技巧
  • Pytest项目搭建总结
  • WireShark网络分析~环境搭建