当前位置:首页 > VUE

vue watch实现

2026-03-07 12:21:10VUE

在 Vue 中实现 watch 的几种方法

Vue 的 watch 用于监听数据变化并执行回调函数,以下是常见的实现方式:

选项式 API 中的 watch

在选项式 API 中,watch 是一个对象,键是需要监听的数据属性,值是对应的回调函数或配置对象。

export default {
  data() {
    return {
      count: 0,
      user: { name: 'Alice' }
    };
  },
  watch: {
    // 监听基本类型数据
    count(newVal, oldVal) {
      console.log(`count 从 ${oldVal} 变为 ${newVal}`);
    },
    // 监听对象属性(深层监听)
    user: {
      handler(newVal, oldVal) {
        console.log('user 对象变化', newVal);
      },
      deep: true // 开启深层监听
    },
    // 监听对象的特定属性
    'user.name'(newVal) {
      console.log('user.name 变化:', newVal);
    }
  }
};

组合式 API 中的 watch

setup()<script setup> 中,使用 watch 函数:

import { ref, watch } from 'vue';

const count = ref(0);
const user = ref({ name: 'Alice' });

// 监听 ref 基本类型
watch(count, (newVal, oldVal) => {
  console.log(`count 从 ${oldVal} 变为 ${newVal}`);
});

// 监听 ref 对象(深层监听)
watch(
  user,
  (newVal) => {
    console.log('user 变化:', newVal);
  },
  { deep: true }
);

// 监听对象的特定属性
watch(
  () => user.value.name,
  (newVal) => {
    console.log('user.name 变化:', newVal);
  }
);

立即执行的 watch

通过 immediate: true 让回调在监听开始时立即执行一次:

watch(
  () => user.value.name,
  (newVal) => {
    console.log('立即执行:', newVal);
  },
  { immediate: true }
);

监听多个数据源

使用数组监听多个数据源,回调参数接收对应数组形式的新旧值:

watch(
  [count, () => user.value.name],
  ([newCount, newName], [oldCount, oldName]) => {
    console.log(`count: ${newCount}, name: ${newName}`);
  }
);

watchEffect 的替代方案

watchEffect 自动追踪依赖,适合无需明确指定监听源的场景:

vue watch实现

import { watchEffect } from 'vue';

watchEffect(() => {
  console.log('count 或 user.name 变化:', count.value, user.value.name);
});

注意事项

  • 深层监听:对象或数组需设置 deep: true 才能监听嵌套属性变化。
  • 性能:避免过度使用 deep,可能影响性能。
  • 清理副作用:回调中若有异步操作,可通过 onInvalidate 清理(watchEffectwatch 均支持)。

标签: vuewatch
分享给朋友:

相关文章

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…

vue实现画板

vue实现画板

Vue 实现画板功能 在 Vue 中实现画板功能可以通过 HTML5 的 Canvas API 实现。以下是一个完整的实现方案: 创建 Vue 组件 新建一个 Vue 单文件组件(SFC),命名为…

vue实现webshell

vue实现webshell

Vue 实现 WebShell 使用 Vue 实现 WebShell 需要结合前端与后端的交互,通常通过 WebSocket 或 HTTP 协议与服务器通信。以下是一个基于 Vue 和 WebSock…