vue3的watch和watchEffect你了解吗

yizhihongxing

当我们在使用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双向绑定实现原理与方法详解

    下面为你讲解“Vue双向绑定实现原理与方法详解”的完整攻略。 一、双向绑定概述 首先要清楚什么是双向绑定,Vue.js 的核心特性之一就是「数据驱动」,它允许我们把应用程序分成一个庞大的部分,其中一些部分是响应用户操作的。双向数据绑定是该特性的主要实现方式之一,它指的是两个相关联的变量之间的同步变化,也就是当其中一个变量修改时,另一个变量也会同步修改。 二、…

    Vue 2023年5月28日
    00
  • vue中使用console.log打印的实现

    下面是详细讲解“vue中使用console.log打印的实现”的完整攻略: 1. 在Vue组件中使用 console.log 在Vue组件中使用 console.log 打印信息是一种常见的调试方式。我们可以在需要打印信息的代码处添加以下代码: console.log(‘要打印的信息’); 例如,在Vue组件中,我们可以使用 created 钩子来打印 Vu…

    Vue 2023年5月27日
    00
  • vue多次循环操作示例

    下面是关于“vue多次循环操作示例”的完整攻略,我将分两个示例说明: 示例一:多层循环嵌套 在vue中,可以使用嵌套的v-for指令来进行多层循环嵌套。比如,我们有一个任务列表,每个任务列表下面又有多个子任务列表,现在要把这些任务列表都展示出来。可以使用以下代码实现: <div v-for="(task, index) in tasks&qu…

    Vue 2023年5月27日
    00
  • Vue computed计算属性的使用方法

    当我们在Vue项目中需要根据数据的状态改变来计算出一个新的值时,可以使用Vue中的计算属性(computed)。计算属性是一个具有缓存机制的属性,只有当它依赖的数据发生变化时,才会重新计算其值。计算属性的优势在于可以减少模板中的逻辑操作,提高页面渲染效率。 下面是计算属性的使用方法及示例说明: 1.定义计算属性 我们可以在Vue实例中定义一个名为“compu…

    Vue 2023年5月27日
    00
  • vue实现简单的跑马灯效果

    下面是“Vue实现简单的跑马灯效果”的完整攻略: 准备工作 首先,我们需要在项目中安装 Vue.js。可以使用以下命令安装: npm install vue 实现过程 创建 Vue 实例: new Vue({ el: ‘#app’, data: { text: ‘这是一段跑马灯文字’, speed: 100, left: 0 }, methods: { mo…

    Vue 2023年5月29日
    00
  • vue微信分享的实现(在当前页面分享其他页面)

    下面我来详细讲解一下在Vue项目中实现微信分享的方法。 首先,我们需要在index.html中加入微信js-sdk的引入: <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> 然后,在项目中新建一个工具类,命名为wechat.…

    Vue 2023年5月27日
    00
  • Vue数据驱动模拟实现2

    下面我将详细讲解“Vue数据驱动模拟实现2”的完整攻略。 什么是Vue数据驱动模拟实现2 Vue数据驱动模拟实现2是模拟Vue框架的数据响应式原理,实现双向数据绑定的简化版。其核心原理是依赖收集和观察者模式。 实现步骤 实现一个Observer(观察者)对象,用于劫持变化和依赖收集。 function Observer(data) { this.data =…

    Vue 2023年5月28日
    00
  • 详解如何在Vue3使用<script lang=“ts“ setup>语法糖

    当我们使用Vue3时,可以使用<script lang=”ts” setup>语法糖来更方便地编写组件。下面我会详细讲解如何在Vue3中使用该语法糖。 准备工作 首先,我们需要安装Vue3以及TypeScript。可以使用以下命令来安装: npm install vue@next typescript 同时,我们需要在项目中添加以下编译器选项(t…

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