当前位置:首页 > 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实现flbook

vue实现flbook

Vue 实现类似 Flbook 的翻页效果 要实现类似 Flbook 的翻页效果,可以使用 Vue 结合 CSS 动画和 JavaScript 事件处理。以下是实现方法: 安装依赖 需要安装 vue…

vue实现评分

vue实现评分

Vue 实现评分功能 使用组件库实现 安装 element-ui 或 ant-design-vue 这类 UI 库,它们已经内置了评分组件。 以 element-ui 为例: <templa…

vue实现修改

vue实现修改

Vue 实现修改功能的方法 在 Vue 中实现修改功能通常涉及表单绑定、状态管理和 API 调用。以下是几种常见实现方式: 双向数据绑定实现表单修改 使用 v-model 指令绑定表单元素与组件数据…

vue 实现点击选中

vue 实现点击选中

实现点击选中效果 在Vue中实现点击选中效果可以通过多种方式完成,以下是几种常见的方法: 方法一:使用v-bind和v-on 通过绑定class和监听click事件来实现选中状态切换。 <…

vue实现天猫

vue实现天猫

Vue实现天猫首页功能 使用Vue.js实现类似天猫的电商首页需要结合多个技术点,包括组件化开发、路由管理、状态管理、API调用等。以下是关键实现步骤: 项目初始化 创建Vue项目并安装必要依赖:…

vue实现http拦截

vue实现http拦截

Vue 实现 HTTP 拦截 在 Vue 项目中,通常通过 Axios 实现 HTTP 拦截功能,用于统一处理请求和响应。以下是具体实现方法: 安装 Axios 通过 npm 或 yarn 安装 A…