Vue 3 中监听多个数据变化的几种方法

1. 使用 watch监听多个 ref/reactive 数据

javascript 复制代码
import { ref, watch } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const name = ref('')
    const user = reactive({ age: 20 })

    // 监听多个数据源
    watch(
      [count, name, () => user.age], // 数组形式传入多个数据源
      ([newCount, newName, newAge], [oldCount, oldName, oldAge]) => {
        console.log('count changed:', newCount, oldCount)
        console.log('name changed:', newName, oldName)
        console.log('age changed:', newAge, oldAge)
        // 执行相关操作
      }
    )

    return { count, name, user }
  }
}
  1. 使用 watchEffect自动追踪依赖
javascript 复制代码
import { ref, watchEffect } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const name = ref('')
    const active = ref(false)

    watchEffect(() => {
      // 这里会自动追踪所有使用到的响应式数据
      console.log('数据变化:', count.value, name.value, active.value)
      // 执行相关操作
    })

    return { count, name, active }
  }
}

3. 监听对象多个属性

javascript 复制代码
import { reactive, watch } from 'vue'

export default {
  setup() {
    const state = reactive({
      count: 0,
      name: '',
      active: false
    })

    // 监听对象多个属性
    watch(
      () => [state.count, state.name],
      ([newCount, newName], [oldCount, oldName]) => {
        console.log('count or name changed')
      }
    )

    return { state }
  }
}
相关推荐
张拭心4 小时前
Cursor 又偷偷更新,这个功能太实用:Visual Editor for Cursor Browser
前端·人工智能
I'm Jie5 小时前
深入了解 Vue 3 组件间通信机制
前端·javascript·vue.js
用户90443816324606 小时前
90%前端都踩过的JS内存黑洞:从《你不知道的JavaScript》解锁底层逻辑与避坑指南
前端·javascript·面试
CodeCraft Studio6 小时前
文档开发组件Aspose 25.12全新发布:多模块更新,继续强化文档、图像与演示处理能力
前端·.net·ppt·aspose·文档转换·word文档开发·文档开发api
PPPPickup7 小时前
easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人
java·前端·javascript
老前端的功夫7 小时前
前端高可靠架构:医疗级Web应用的实时通信设计与实践
前端·javascript·vue.js·ubuntu·架构·前端框架
前端大卫7 小时前
【重磅福利】学生认证可免费领取 Gemini 3 Pro 一年
前端·人工智能
孜燃7 小时前
Flutter APP跳转Flutter APP 携带参数
前端·flutter
脾气有点小暴8 小时前
前端页面跳转的核心区别与实战指南
开发语言·前端·javascript
lxh01138 小时前
最长递增子序列
前端·数据结构·算法