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 }
  }
}
相关推荐
IT_陈寒13 分钟前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰39 分钟前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
山河木马1 小时前
渲染管线-计算得到gl_Position(顶点着色器)之后续GPU流程
javascript·webgl·图形学
竹林8181 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12272 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪3 小时前
Vue3-生命周期
前端
莪_幻尘3 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4534 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅4 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端