当前位置:首页 > VUE

vue实现watch

2026-02-10 14:14:36VUE

在 Vue 中实现 watch 监听数据变化

Vue 的 watch 功能用于监听数据变化并执行相应的回调函数。可以通过选项式 API 或组合式 API 实现。

选项式 API 中的 watch

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

export default {
  data() {
    return {
      count: 0,
      user: {
        name: 'Alice',
        age: 25
      }
    }
  },
  watch: {
    // 监听基本数据类型
    count(newVal, oldVal) {
      console.log(`count 从 ${oldVal} 变为 ${newVal}`);
    },
    // 监听对象属性
    'user.name'(newVal, oldVal) {
      console.log(`user.name 从 ${oldVal} 变为 ${newVal}`);
    },
    // 使用配置对象
    user: {
      handler(newVal, oldVal) {
        console.log('user 对象变化', newVal, oldVal);
      },
      deep: true, // 深度监听
      immediate: true // 立即执行
    }
  }
}

组合式 API 中的 watch

在组合式 API 中,watch 是一个函数,可以监听单个或多个数据源。

import { ref, watch, reactive } from 'vue';

export default {
  setup() {
    const count = ref(0);
    const user = reactive({
      name: 'Alice',
      age: 25
    });

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

    // 监听 reactive 对象的属性
    watch(
      () => user.name,
      (newVal, oldVal) => {
        console.log(`user.name 从 ${oldVal} 变为 ${newVal}`);
      }
    );

    // 监听多个数据源
    watch(
      [() => user.name, count],
      ([newName, newCount], [oldName, oldCount]) => {
        console.log('多个数据变化', newName, newCount);
      }
    );

    // 深度监听和立即执行
    watch(
      () => user,
      (newVal, oldVal) => {
        console.log('user 对象变化', newVal, oldVal);
      },
      { deep: true, immediate: true }
    );

    return { count, user };
  }
}

watchEffect 的使用

watchEffect 是组合式 API 中的另一种监听方式,它会立即执行一次,并自动追踪其依赖。

import { ref, watchEffect } from 'vue';

export default {
  setup() {
    const count = ref(0);

    watchEffect(() => {
      console.log('count 的值是:', count.value);
    });

    return { count };
  }
}

停止监听

在组合式 API 中,watchwatchEffect 会返回一个停止监听的函数。

vue实现watch

const stop = watch(count, (newVal) => {
  console.log('count 变化:', newVal);
});

// 停止监听
stop();

性能注意事项

  • 避免过度使用 deep,深度监听会增加性能开销。
  • 对于大型对象或数组,考虑监听特定属性而非整个对象。
  • 在组件卸载时,手动停止不需要的监听以避免内存泄漏。

通过以上方法,可以在 Vue 中灵活地监听数据变化并执行相应逻辑。

标签: vuewatch
分享给朋友:

相关文章

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue C…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…