vue3中watch详解

本文介绍了Vue3中watch选项的使用方法,包括响应式和深度观察,以及在CompositionAPI中的应用。还讨论了如何在组件中执行副作用操作、停止观察等特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Vue 3 中,watch 是一个用于观察和响应 Vue 组件中响应式数据变化的选项或函数。当被观察的数据发生变化时,watch 可以执行一些副作用或回调操作,比如发送请求、更新 DOM 之外的状态或执行其他逻辑。

使用方法

在 Vue 3 的组件选项中,你可以通过 watch 选项来定义观察者:

import { ref, watch } from 'vue';

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

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

    return {
      count
    };
  }
}

在上面的例子中,我们创建了一个响应式引用 count,并使用 watch 函数来观察它的变化。当 count 的值改变时,回调函数会被触发,并打印出旧值和新值。

特性

  1. 响应式watch 能够观察响应式数据的变化,并在数据改变时执行相应的回调。

  2. 深度观察:默认情况下,watch 是浅观察的,即它只能检测到引用类型数据的第一层属性的变化。如果需要深度观察对象或数组内部的嵌套属性变化,可以传递 deep: true 选项。

  3. 立即执行:默认情况下,watch 是在数据第一次变化时执行的。如果需要在组件创建时立即执行回调,可以传递 immediate: true 选项。

  4. 停止观察watch 函数返回一个停止观察的函数,你可以调用它来停止观察响应式数据的变化。

在 Composition API 中使用

在 Vue 3 的 Composition API 中,watch 是一个独立的函数,可以直接在 setup 函数中使用:

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

export default {
  setup() {
    const count = ref(0);
    const doubleCount = computed(() => count.value * 2);

    onMounted(() => {
      watch(count, (newVal, oldVal) => {
        console.log(`Count changed from ${oldVal} to ${newVal}`);
      });
      
      // 或者观察多个源
      watch([count, doubleCount], ([newCount, newDoubleCount], [oldCount, oldDoubleCount]) => {
        console.log(`Count changed from ${oldCount} to ${newCount}`);
        console.log(`Double count changed from ${oldDoubleCount} to ${newDoubleCount}`);
      });
    });

    return {
      count,
      doubleCount
    };
  }
}

在上面的例子中,我们使用了 onMounted 生命周期钩子来确保在组件挂载后才开始观察 count。我们还展示了如何同时观察多个响应式源。

停止观察

如果需要手动停止观察,你可以将 watch 函数的返回值保存到一个变量中,并在适当的时候调用它:

const stopWatch = watch(count, (newVal, oldVal) => {
  // ...
});

// 停止观察
stopWatch();

总结

Vue 3 中的 watch 提供了一种灵活的方式来观察和响应组件中响应式数据的变化。你可以使用它来执行副作用操作、发送请求或更新非响应式状态。在 Composition API 中,watch 函数与 setup 函数一起使用,使得观察响应式数据变得更加直观和模块化。

Vue3中的`watch`与Vue2中的`watch`有一些重要的变化。在Vue3中,`watch`仍然允许我们监视响应式数据的变化,并对变化做出相应的操作。不过,Vue3引入了一个新的API——`watchEffect`来取代Vue2中的`watch`。 在Vue3中,`watch`可以通过以下几种方式使用: 1. **基础用法**:可以使用`watch`方法来监视一个响应式数据的变化,并在变化发生时执行回调函数。示例如下: ```javascript import { watch } from 'vue'; watch(() => { // 监视的响应式数据 return state.value; }, (newVal, oldVal) => { // 响应式数据发生变化时执行的回调函数 console.log(`new value: ${newVal}, old value: ${oldVal}`); }); ``` 2. **立即执行**:可以通过在`watch`选项中设置`immediate`为`true`,使得监听函数会在初始创建时立即执行一次。示例如下: ```javascript watch(() => { // 监视的响应式数据 return state.value; }, (newVal, oldVal) => { // 响应式数据发生变化时执行的回调函数 console.log(`new value: ${newVal}, old value: ${oldVal}`); }, { immediate: true }); ``` 3. **深度监听**:可以通过设置`deep`为`true`来进行深度监听,以便检测对象内部值的变化。示例如下: ```javascript watch(() => { // 监视的响应式数据 return state.obj; }, (newVal, oldVal) => { // 响应式数据发生变化时执行的回调函数 console.log(`new value: ${newVal}, old value: ${oldVal}`); }, { deep: true }); ``` 此外,Vue3还引入了`watchEffect`,它可以轻松地监视响应式数据的变化,并在其变化时执行回调函数。与`watch`不同的是,`watchEffect`不需要显式指定要监视的数据,它会自动追踪代码中使用的响应式数据,并在其变化时触发。示例如下: ```javascript import { watchEffect } from 'vue'; watchEffect(() => { // 使用到的响应式数据 console.log(state.value); }); ``` 需要注意的是,在Vue3中,`watch`和`watchEffect`都是基于副作用函数实现的,所以它们可以在组件渲染期间多次执行。 以上是Vue3中`watch`和`watchEffect`的详细说明,希望能对你有所帮助!如有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Br不二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值