vue3中的watch和watchEffect如何用

发布时间:2023-05-12 09:40:58 作者:iii
来源:亿速云 阅读:192

Vue3中的watch和watchEffect如何用

在Vue3中,watchwatchEffect是两个非常重要的响应式API,它们用于监听数据的变化并执行相应的操作。本文将详细介绍这两个API的使用方法、区别以及在实际开发中的应用场景。

1. watch的基本用法

watch用于监听一个或多个响应式数据的变化,并在数据变化时执行回调函数。它的基本语法如下:

import { watch, ref } from 'vue';

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

    watch(count, (newValue, oldValue) => {
      console.log(`count changed from ${oldValue} to ${newValue}`);
    });

    return {
      count,
    };
  },
};

1.1 监听多个数据源

watch可以同时监听多个数据源,只需将数据源放在一个数组中即可:

import { watch, ref } from 'vue';

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

    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,
    };
  },
};

1.2 深度监听

默认情况下,watch是浅层监听的,即它只会监听数据的第一层变化。如果要监听对象或数组内部的变化,可以使用deep选项:

import { watch, ref } from 'vue';

export default {
  setup() {
    const user = ref({
      name: 'Vue',
      age: 3,
    });

    watch(
      user,
      (newValue, oldValue) => {
        console.log('user changed', newValue);
      },
      { deep: true }
    );

    return {
      user,
    };
  },
};

1.3 立即执行回调

默认情况下,watch的回调函数只有在监听的数据发生变化时才会执行。如果希望在组件初始化时立即执行一次回调函数,可以使用immediate选项:

import { watch, ref } from 'vue';

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

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

    return {
      count,
    };
  },
};

2. watchEffect的基本用法

watchEffect是Vue3中引入的一个新的API,它会在组件初始化时立即执行一次,并在其依赖的响应式数据发生变化时重新执行。它的基本语法如下:

import { watchEffect, ref } from 'vue';

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

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

    return {
      count,
    };
  },
};

2.1 自动追踪依赖

watchEffect的一个显著特点是它会自动追踪其内部使用的响应式数据,并在这些数据发生变化时重新执行。这意味着你不需要显式地指定要监听的数据源,watchEffect会自动处理这些依赖。

import { watchEffect, ref } from 'vue';

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

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

    return {
      count,
      name,
    };
  },
};

2.2 停止监听

watchEffect返回一个停止监听的函数,你可以在需要时调用这个函数来停止监听:

import { watchEffect, ref } from 'vue';

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

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

    // 停止监听
    stop();

    return {
      count,
    };
  },
};

2.3 清理副作用

watchEffect的回调函数可以返回一个清理函数,这个清理函数会在watchEffect重新执行之前被调用,或者在watchEffect停止监听时被调用。这个特性非常适合用于清理一些副作用,比如取消网络请求、清除定时器等。

import { watchEffect, ref } from 'vue';

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

    watchEffect((onInvalidate) => {
      const timer = setTimeout(() => {
        console.log(`count is ${count.value}`);
      }, 1000);

      onInvalidate(() => {
        clearTimeout(timer);
      });
    });

    return {
      count,
    };
  },
};

3. watchwatchEffect的区别

虽然watchwatchEffect都可以用于监听响应式数据的变化,但它们在使用场景和功能上有一些区别:

3.1 依赖追踪

3.2 执行时机

3.3 回调函数的参数

3.4 清理副作用

4. 实际应用场景

4.1 使用watch的场景

4.2 使用watchEffect的场景

5. 总结

watchwatchEffect是Vue3中两个非常重要的响应式API,它们分别适用于不同的场景。watch更适合用于监听特定数据的变化,并且可以获取旧值;而watchEffect则更适合用于自动追踪依赖、立即执行逻辑以及清理副作用。

在实际开发中,你可以根据具体的需求选择合适的API。如果你需要精确控制监听的数据源,并且需要获取旧值,那么watch是更好的选择;如果你希望自动追踪依赖,并且需要立即执行逻辑或清理副作用,那么watchEffect是更好的选择。

通过合理地使用watchwatchEffect,你可以更高效地处理Vue3中的响应式数据变化,提升应用的性能和可维护性。

推荐阅读:
  1. 怎么用Vue3和Element Plus实现自动导入
  2. Vue3如何实现无限滚动组件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue3 watch watcheffect

上一篇:vue框架怎么调整颜色

下一篇:vue中如何显示表格序号

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》