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日

相关文章

  • VUE视频怎么添加时间地点的水印?

    添加时间地点水印的方法通常有两种,一种是使用CSS样式制作水印,另一种是使用JavaScript插件实现水印。 使用CSS样式制作水印 首先,我们需要在VUE组件的template中添加HTML代码,如下所示: <div class="video-wrapper"> <video src="your_video…

    Vue 2023年5月29日
    00
  • 浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑

    下面是针对“浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑”的完整攻略。 标题 第一步:Hbuilder安装与使用 在Hbuilder官网中下载对应系统的Hbuilder软件 去Hbuilder的官方文档中找打包流程并根据官方文档进行打包操作 打包完成之后,在运行的手机或者模拟器上测试APP的效果,确保APP在打包过程中没有出现问题 第二步…

    Vue 2023年5月27日
    00
  • 结合axios对项目中的api请求进行封装操作

    对项目中的API请求进行封装操作可以提高代码复用率和维护性,同时也能提高代码的可读性和可测试性。 以下是结合axios对项目中的API请求进行封装操作的攻略: 第一步:安装axios 在终端中运行以下命令,安装axios。 npm install axios –save 第二步:创建API请求封装文件 在项目src目录下新建一个api文件夹,用于存放API…

    Vue 2023年5月28日
    00
  • 详解如何在vue项目中使用lodop打印插件

    下面是详解如何在vue项目中使用lodop打印插件的完整攻略: 步骤一:下载并安装Lodop插件 下载Lodop打印插件的安装包 安装Lodop打印插件,安装完成后,可以在浏览器的扩展中看到Lodop打印插件 步骤二:在vue项目中使用Lodop插件 使用npm安装lodop-printer npm install –save lodop-printer …

    Vue 2023年5月27日
    00
  • vue 组件使用中的一些细节点

    下面我来详细讲解一下vue组件使用中的一些细节点。 组件标签名的命名 在Vue中使用组件需要先在Vue实例中注册该组件,命名时需要注意以下几点: 组件标签名建议使用连字符形式如 <my-component></my-component>,而不是驼峰式形式如 <MyComponent></MyComponent>…

    Vue 2023年5月27日
    00
  • vue中如何进行异步请求

    当在Vue.js应用程序中进行异步请求时,Vue.js使我们能够使用它在“vue-resource”和“axios”两个包中提供的两种不同方式。这两种方式都可以很容易地在Vue.js中创建和使用XHR请求。现在,我们来看一下如何使用这两种方式进行异步请求。 使用vue-resource进行异步请求 步骤一:安装vue-resource 在Vue.js项目中使…

    Vue 2023年5月29日
    00
  • koa2服务端使用jwt进行鉴权及路由权限分发的流程分析

    下面是详细讲解”koa2服务端使用jwt进行鉴权及路由权限分发的流程分析”完整攻略: 什么是 JWT JWT(JSON Web Token)是一个开放标准(RFC 7519),可以使用 JSON 对象在网络上安全地传输信息。JWT 通常被用来在客户端和服务器之间传递身份信息以及其他信息。在用户登录成功后,服务器将 JWT 作为身份认证的令牌返回给客户端,客户…

    Vue 2023年5月28日
    00
  • 详解vue中v-model和v-bind绑定数据的异同

    详解Vue中v-model和v-bind绑定数据的异同: 1.什么是 v-model 和 v-bind v-model 和 v-bind 是 Vue 常用的两个指令,它们都用于进行数据绑定。其中: v-model 用于实现表单控件的双向绑定。 v-bind 用于单向绑定,可动态绑定 HTML 属性。 2.v-model 与 v-bind 的区别 2.1 数据…

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