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

2025-0820 Vue 3 中同时监听多个变量(内容来源deepseeks)

以2个变量为例:

方法一:使用多个 watch

<script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');// 分别监听两个变量
watch(count, (newValue, oldValue) => {console.log('count changed:', newValue, oldValue);
});watch(name, (newValue, oldValue) => {console.log('name changed:', newValue, oldValue);
});
</script>

方法二:使用 watch 监听数组(推荐)

<script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');// 同时监听两个变量
watch([count, name], ([newCount, newName], [oldCount, oldName]) => {console.log('count changed:', newCount, oldCount);console.log('name changed:', newName, oldName);
});
</script>

方法三:使用 watchEffect(自动追踪依赖)

<script setup>
import { ref, watchEffect } from 'vue';const count = ref(0);
const name = ref('');// 自动追踪依赖的变量
watchEffect(() => {console.log('count:', count.value);console.log('name:', name.value);// 这里可以执行需要同时监听两个变量的逻辑
});
</script>

方法四:带有配置选项的监听

<script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');// 带有配置选项的监听
watch([count, name],([newCount, newName], [oldCount, oldName]) => {console.log('数据变化了:', { newCount, newName, oldCount, oldName });},{immediate: true, // 立即执行一次deep: true,      // 深度监听(如果变量是对象或数组)
  }
);
</script>

方法五:监听 reactive 对象的多个属性

<script setup>
import { reactive, watch, toRefs } from 'vue';const state = reactive({count: 0,name: '',active: true
});// 监听 reactive 对象的多个属性
watch(() => [state.count, state.name],([newCount, newName], [oldCount, oldName]) => {console.log('count or name changed:', { newCount, newName });}
);// 或者使用 toRefs
const { count, name } = toRefs(state);
watch([count, name], ([newCount, newName]) => {console.log('count or name changed:', newCount, newName);
});
</script>

方法六:条件监听(只有特定条件时才执行)

<script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');watch([count, name],([newCount, newName]) => {// 只有满足特定条件时才执行if (newCount > 5 && newName !== '') {console.log('条件满足:', newCount, newName);}}
);
</script>

方法七:防抖的监听

<script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');let timeoutId = null;watch([count, name],([newCount, newName]) => {// 防抖处理
    clearTimeout(timeoutId);timeoutId = setTimeout(() => {console.log('防抖后的变化:', newCount, newName);}, 300);}
);
</script>

完整示例

<template><div><button @click="count++">Count: {{ count }}</button><input v-model="name" placeholder="Enter name"><p>变化日志: {{ log }}</p></div>
</template><script setup>
import { ref, watch } from 'vue';const count = ref(0);
const name = ref('');
const log = ref('');// 同时监听两个变量
watch([count, name],([newCount, newName], [oldCount, oldName]) => {const message = `Count: ${oldCount} → ${newCount}, Name: "${oldName}""${newName}"`;log.value = message;console.log(message);},{ immediate: true }
);
</script>

推荐使用方法二(watch 监听数组),因为它:

  • 代码清晰,明确知道监听哪些变量

  • 可以同时获取新旧值

  • 性能较好,只在指定变量变化时触发

  • 支持配置选项(immediate、deep等)

根据你的具体需求选择合适的方法。如果只是需要响应式地执行某些逻辑,watchEffect 可能更简洁;如果需要精确控制监听哪些变量和获取新旧值,使用 watch 数组更合适。

http://www.sczhlp.com/news/22441/

相关文章:

  • 说一下泛型原理,并举例说明
  • 如何查看网站的死链接小说百度搜索风云榜
  • 美国虚拟主机火网互联一键seo提交收录
  • 沈阳做网站推广网址seo关键词
  • 机械东莞网站建设北京搜索优化推广公司
  • wordpress 4.7下载大兵seo博客
  • 高端网站开发建设精准引流获客软件
  • 淘客网站要怎么做免费推广
  • 用PS做的个人网站图片文案代写平台
  • 静态代理和动态代理的区别,什么场景使用
  • 微信 网站应用开发广州网站排名推广
  • 可信网站认证必须做吧拼多多关键词优化是怎么弄的
  • 千牛cdn wordpress海外seo推广公司
  • 怎么给别人做网站优化企业推广宣传方式
  • 网站的优化外包自己搭建一个网站
  • b2b就是做网站吗网络推广的公司是骗局吗
  • 题解 | luoguP6491 [COCI 2010/2011 #6] ABECEDA
  • 第四章 梯度下降
  • 动态网站开发背景怎么自己注册网站平台了
  • 做个中英文网站多少钱专业seo培训学校
  • 漯河网站推广多少钱做百度推广
  • 上海网站建设专业公司哪家好深圳百度推广客服电话多少
  • 怎样做能让招聘网站记住密码站长之家查询
  • 山西省国贸网站建设武汉企业seo推广
  • 重庆哪里有做淘宝网站推广的微商推广哪家好
  • 福州如何做百度的网站推广seo引擎搜索网站关键词
  • 公司网站开发费用大概多少百度旗下所有app列表
  • 大型网站建设部署方案seo搜索排名优化是什么意思
  • 8月20日
  • 网络流补漏