当前位置:首页 > VUE

vue实现watch

2026-03-28 00:03:25VUE

Vue 中实现 watch 的方法

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

使用选项式 API 的 watch

在选项式 API 中,可以直接在组件的 watch 选项中定义监听器。监听器可以是一个函数,也可以是一个包含 handlerimmediatedeep 等配置的对象。

export default {
  data() {
    return {
      count: 0,
      user: {
        name: 'John',
        age: 25
      }
    }
  },
  watch: {
    // 监听简单数据
    count(newVal, oldVal) {
      console.log(`count changed from ${oldVal} to ${newVal}`);
    },
    // 监听对象属性
    'user.name': {
      handler(newVal, oldVal) {
        console.log(`user.name changed from ${oldVal} to ${newVal}`);
      },
      immediate: true // 立即触发一次
    },
    // 深度监听对象
    user: {
      handler(newVal, oldVal) {
        console.log('user object changed', newVal);
      },
      deep: true // 深度监听
    }
  }
}

使用组合式 API 的 watch

在组合式 API 中,可以通过 watch 函数来实现监听。watch 函数接受一个响应式引用或一个 getter 函数作为监听源,以及一个回调函数。

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

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

    // 监听 ref
    watch(count, (newVal, oldVal) => {
      console.log(`count changed from ${oldVal} to ${newVal}`);
    });

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

    // 深度监听 reactive 对象
    watch(
      () => user,
      (newVal, oldVal) => {
        console.log('user object changed', newVal);
      },
      { deep: true }
    );

    return {
      count,
      user
    };
  }
}

使用 watchEffect

watchEffect 是另一种监听方式,它会立即执行一次回调函数,并自动追踪回调函数中使用的响应式依赖。当依赖发生变化时,回调函数会再次执行。

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

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

    watchEffect(() => {
      console.log(`count is ${count.value}`);
      console.log(`user.name is ${user.name}`);
    });

    return {
      count,
      user
    };
  }
}

监听多个数据源

可以通过数组形式监听多个数据源,回调函数会接收到一个包含新值和旧值的数组。

import { ref, watch } from 'vue';

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

    watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
      console.log(`count changed from ${oldCount} to ${newCount}`);
      console.log(`name changed from ${oldName} to ${newName}`);
    });

    return {
      count,
      name
    };
  }
}

停止监听

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

vue实现watch

import { ref, watch } from 'vue';

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

    const stop = watch(count, (newVal, oldVal) => {
      console.log(`count changed from ${oldVal} to ${newVal}`);
    });

    // 停止监听
    stop();

    return {
      count
    };
  }
}

通过以上方法,可以根据实际需求选择合适的监听方式,灵活地监听数据变化并执行相应的操作。

标签: vuewatch
分享给朋友:

相关文章

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue 实现excel

vue 实现excel

Vue 实现 Excel 功能 前端导出 Excel 使用 xlsx 库可以轻松实现前端 Excel 导出功能。安装依赖: npm install xlsx 导出 Excel 示例代码: impo…