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 }
  }
}
相关推荐
笑虾14 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
xiaogg367814 小时前
spring oauth2 单点登录
java·vue.js·spring
雾岛听风69114 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
遇见~未来14 小时前
第三篇_现代布局_从弹性到网格
前端·css3
前端那点事14 小时前
Vue前端SEO优化全攻略(实操落地版,新手也能上手)
前端·vue.js
Dxy123931021614 小时前
HTML 如何使用 SVG 画曲线
前端·算法·html
用户23678298016814 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
hahaha 1hhh14 小时前
中文乱码 ubuntu autodl
linux·运维·前端
棉猴15 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本
计算机学姐15 小时前
基于微信小程序的校园失物招领管理系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·信息可视化·微信小程序·uni-app