当前位置:首页 > 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实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

vue拖动实现

vue拖动实现

实现 Vue 拖动功能的方法 使用 HTML5 拖放 API 在 Vue 中可以利用 HTML5 的原生拖放 API 实现拖动功能。通过 draggable 属性标记可拖动元素,结合 @dragsta…