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

在 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 对象中的属性变化,根据实际需求选择合适的方式。

相关推荐
chilavert3183 分钟前
技术演进中的开发沉思-266 Ajax:让 动画优化
javascript·ajax·okhttp
一水鉴天11 分钟前
整体设计 定稿 之 34 codybuddy项目跨机同步方案 之2 (codebuddy)
服务器·前端
朱 欢 庆11 分钟前
Jenkins任务执行完成后发送邮件
前端·经验分享·jenkins
前端无涯12 分钟前
React/Vue 消息订阅发布:实现方式、开发避坑与面试核心考点
前端·javascript·vue.js
一个没有感情的程序猿23 分钟前
前端实现交互式3D人体肌肉解剖图:基于 Three.js + React Three Fiber 的完整方案
前端·javascript·3d
武玄天宗23 分钟前
第五章、flutter怎么创建底部底部导航栏界面
前端·flutter
Goodbaibaibai25 分钟前
接口请求了两次,一次报200,一次报404
前端
chilavert31825 分钟前
技术演进中的开发沉思-268 Ajax:JSON
javascript·ajax·okhttp·json
qq_4634084227 分钟前
React Native跨平台技术在开源鸿蒙中使用WebView来加载鸿蒙应用的网页版或通过一个WebView桥接本地代码与鸿蒙应用
javascript·算法·react native·react.js·开源·list·harmonyos
全马必破三28 分钟前
React虚拟Dom
前端·javascript·react.js