vue3的watch和watchEffect你了解吗

当我们在使用Vue.js开发应用时,经常需要监听数据的变化并做出相应的响应,在Vue.js中,我们可以使用watchwatchEffect这两个响应式API来实现数据的监听。

watch

watch是Vue.js中的一个响应式API,用于监听指定数据的变化并做出相应的响应。在Vue3中,我们可以通过watch函数来创建一个监听器。

watch的基本用法

以下是watch的基本用法:

import { watch } from 'vue';

watch(source, callback, options);

我们需要传递三个参数:

  1. source: 要监听的数据。可以是一个Refs对象、一个计算属性或一个函数,返回要监听的数据。

  2. callback: 当监听的数据变化时会被调用的函数,该函数接受两个参数:新的值和旧的值。

  3. options(可选):一些可选的选项参数,例如deep(是否深度监听对象的属性)、immediate(是否在开始监听时执行一次回调函数)等。

以下示例演示如何监听一个Refs对象的变化:

import { watch, ref } from "vue";

const count = ref(0);

watch(count, (newVal, oldVal) => {
  console.log(`count: ${oldVal} -> ${newVal}`);
});

每次count的值发生变化时,回调函数将会被调用,输出旧值和新值。

监听多个数据

虽然我们可以分别使用多个watch函数来监听多个不同的数据,但更好的做法是一次性地同时监听多个数据。在Vue3中,我们可以使用一个watch函数来同时监听一组数据。

以下示例演示如何同时监听多个数据:

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

const count = ref(0);
const state = reactive({ msg: "Hello, Vue3!" });

watch([count, () => state.msg], ([countVal, msgVal], [prevCount, prevMsg]) => {
  console.log(`count: ${prevCount} -> ${countVal}`);
  console.log(`msg: ${prevMsg} -> ${msgVal}`);
});

watch函数的第一个参数可以传递一个数组,其中每个元素都是一个要监听的数据项。这里传递了两个数据项:count和一个函数,该函数返回state对象的msg属性。

回调函数的第一个参数是一个由新的数据值组成的数组,第二个参数是一个由旧的数据值组成的数组,这样我们就可以分别获取不同数据项的新值和旧值,方便地进行处理。

watchEffect

watchEffect是Vue3中的另一个响应式API,它可以帮助我们监听一个数据的变化并在回调函数中执行对应的操作。与watch不同的是,watchEffect不需要自己定义要监听的数据和回调函数,而是通过自动追踪依赖数据的变化并即时执行回调函数来实现。

以下是watchEffect的基本用法:

import { watchEffect, ref } from "vue";

const count = ref(0);

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

我们传递了一个函数作为watchEffect的唯一参数,该函数会被立即执行,并且在这个函数中使用的所有响应式数据项(例如count)被自动追踪,只要其中任何一个数据发送了变化,该函数就会再次被调用。

limit选项

如果我们想限制watchEffect不要在每次变化时都重新执行,我们可以使用limit选项来限制执行次数。

以下示例演示如何使用watchEffectlimit选项来限制执行次数:

import { watchEffect, ref } from "vue";

const count = ref(0);

watchEffect((onInvalidate) => {
  const timer = setInterval(() => {
    count.value++;
  }, 1000);

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

}, {
  limit: 3
});

在这个例子中,我们使用了setInterval函数每秒钟递增count的值,同时我们传递了一个匿名函数作为watchEffect的第一个参数。在这个函数中,我们可以轻松地使用count响应式变量。

我们还使用了onInvalidate函数来注册一个无效化回调,这个无效化回调在watchEffect结束时被调用。在这个回调函数中,我们清除了之前注册的计时器。

最后,我们使用limit选项来限制watchEffect仅在前三次变化时执行。在第四次变化开始时,watchEffect将不再执行。

在Vue3中,watchwatchEffect的使用场景由我们自己的需求决定。需要注意的是,当数据变化时,它们执行的过程和性能都是不同的。watch适合处理复杂的业务逻辑,而watchEffect适合处理简单的副作用函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3的watch和watchEffect你了解吗 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 基于elementUI使用v-model实现经纬度输入的vue组件

    下面是详细的攻略。 简介 在开发vue前端应用时,我们经常需要使用表单组件,而表单组件的一种最常见的需求是输入经纬度信息。在这个需求中,我们需要使用两个输入框分别输入经度和纬度,而这两个值通常需要使用一个对象来传递。另外,为了提升开发效率,我们可以使用elementUI中的input和input-number组件对输入框进行美化,使用v-model指令来实现…

    Vue 2023年5月29日
    00
  • vue3.0实现点击切换验证码(组件)及校验

    下面是关于vue3.0实现点击切换验证码的完整攻略: 步骤一:创建ClickVerify组件 首先,我们需要创建一个名为ClickVerify的组件,并在其中实现验证码的切换和校验。在组件的模板中,我们可以使用<canvas>标签来绘制验证码,并通过v-on:click指令来监听用户的点击事件,从而实现验证码的切换。示例代码如下: <tem…

    Vue 2023年5月27日
    00
  • Vue 嵌套路由使用总结(推荐)

    Vue 嵌套路由使用总结(推荐)攻略 什么是嵌套路由? 在 Vue 路由中,嵌套路由就是将多个组件的路由嵌套在一起,形成一个组件树结构。父路由对应的组件内部有子路由对应的组件,子路由对应的组件内部又可以嵌套更深层的路由和组件。在一个页面内,使用嵌套路由可以实现多级导航和页面切换的功能。 如何使用嵌套路由? 1. 定义父路由和子路由 在路由配置中,我们需要定义…

    Vue 2023年5月27日
    00
  • Vue.js中关于侦听器(watch)的高级用法示例

    Vue.js是一个非常流行的JavaScript框架,它提供了很多便捷的API来进行数据的操作。其中重要的一个API就是侦听器(watch),可以监听Vue实例中数据的变化并做出相应的响应。 本文将为大家详细讲解Vue.js中关于侦听器的高级用法,通过两条示例来展示如何使用侦听器来处理复杂的数据逻辑。 简单的侦听器 首先,我们来看一个简单的侦听器:当Vue实…

    Vue 2023年5月28日
    00
  • Vue使用watch监听一个对象中的属性的实现方法

    要在Vue中使用watch监听一个对象中的属性,需要先定义需要监听的对象和属性,然后在Vue实例中定义一个相应的watch选项来处理属性变化。下面是实现方法的详细步骤: 步骤一:定义需要监听的对象和属性 首先,我们需要在Vue实例中定义一个对象并指定需要监听的属性。如下所示: new Vue({ data: { user: { name: ‘张三’, age…

    Vue 2023年5月28日
    00
  • vue cli 全面解析

    Vue CLI 全面解析 什么是Vue CLI Vue CLI是一个基于Vue.js进行快速开发的标准化工具,提供了快速生成Vue项目的能力,对于开发和构建大型Vue.js应用非常有帮助。它包含了一套插件和预设,可以让你在几分钟内即可创建Vue项目,配置工具链。 安装Vue CLI 要安装Vue CLI,我们首先需要安装Node.js。我们可以去Node.j…

    Vue 2023年5月27日
    00
  • Vue中.env、.env.development及.env.production文件说明

    在Vue项目中,.env、.env.development及.env.production文件是用来保存环境变量的配置文件。这些文件是通过webpack的DefinePlugin插件实现的,可以实现在不同的环境下加载不同的配置。 .env文件 .env文件是包含在所有环境中的通用配置,process.env对象可以访问它定义的所有变量。比如,我们可以在.en…

    Vue 2023年5月27日
    00
  • 一文搞懂Vue3中toRef和toRefs函数的使用

    一文搞懂Vue3中toRef和toRefs函数的使用 Vue3引入了toRef和toRefs函数,可以让我们更加便捷地操作和使用响应式数据。下面来详细讲解一下它们的使用方法。 toRef函数 toRef函数可以将一个响应式对象的属性转化为一个ref对象,使得这个属性可以被“单独响应”。 用法 const { toRef } = Vue3; const obj…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部