vue3侦听器

举报
林欣 发表于 2025/03/16 21:05:01 2025/03/16
【摘要】 在 Vue 3 中,侦听器(watchers)是一种用于观察和响应 Vue 实例上数据变化的机制。与计算属性(computed properties)不同,侦听器允许你执行异步操作或更复杂的副作用处理。在 Vue 3 中,你可以使用 watch 函数来创建侦听器。watch 函数可以在组件的 setup 函数中使用,也可以在组合式 API 的其他部分使用。以下是一些关于如何在 Vue 3 中...

在 Vue 3 中,侦听器(watchers)是一种用于观察和响应 Vue 实例上数据变化的机制。与计算属性(computed properties)不同,侦听器允许你执行异步操作或更复杂的副作用处理。

在 Vue 3 中,你可以使用 watch 函数来创建侦听器。watch 函数可以在组件的 setup 函数中使用,也可以在组合式 API 的其他部分使用。以下是一些关于如何在 Vue 3 中使用侦听器的基本示例和说明:

基本用法

<template>
  <div>
    <p>Number: {{ number }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { ref, watch } from 'vue';

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

    const increment = () => {
      number.value++;
    };

    // 侦听 number 的变化
    watch(number, (newVal, oldVal) => {
      console.log(`Number changed from ${oldVal} to ${newVal}`);
    });

    return {
      number,
      increment,
    };
  },
};
</script>

在这个例子中,watch 函数用于侦听 number 的变化,并在变化时执行回调函数。

侦听多个源

你可以使用一个数组来同时侦听多个响应式引用或计算属性:

<script>
import { ref, watch } from 'vue';

export default {
  setup() {
    const foo = ref('');
    const bar = ref('');

    watch([foo, bar], ([newFoo, newBar], [oldFoo, oldBar]) => {
      console.log(`Foo changed from ${oldFoo} to ${newFoo}`);
      console.log(`Bar changed from ${oldBar} to ${newBar}`);
    });

    return {
      foo,
      bar,
    };
  },
};
</script>

深度侦听

默认情况下,watch 只能侦听引用类型(对象或数组)的顶层属性的变化。如果你需要侦听嵌套属性的变化,可以使用 deep 选项:

<script>
import { reactive, watch } from 'vue';

export default {
  setup() {
    const user = reactive({
      name: 'John',
      address: {
        city: 'New York',
      },
    });

    watch(user, (newVal, oldVal) => {
      console.log('User changed:', newVal, oldVal);
    }, { deep: true });

    // 修改嵌套属性
    setTimeout(() => {
      user.address.city = 'Los Angeles';
    }, 2000);

    return {
      user,
    };
  },
};
</script>

立即执行

默认情况下,侦听器在第一次绑定时不会立即执行其回调函数。如果你希望在绑定时立即执行一次,可以使用 immediate 选项:

<script>
import { ref, watch } from 'vue';

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

    watch(count, (newVal, oldVal) => {
      console.log(`Count changed from ${oldVal} to ${newVal}`);
    }, { immediate: true });

    return {
      count,
    };
  },
};
</script>

停止侦听

watch 函数返回一个停止侦听的函数。你可以调用这个函数来停止侦听某个响应式源:

<script>
import { ref, watch, onUnmounted } from 'vue';

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

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

    // 在组件卸载时停止侦听
    onUnmounted(() => {
      stopWatch();
    });

    return {
      count,
    };
  },
};
</script>

这些示例展示了 Vue 3 中 watch 函数的一些基本用法和选项。通过这些功能,你可以灵活地侦听和响应 Vue 实例上的数据变化。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。