我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文搞懂Vue3中watchEffect侦听器的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文搞懂Vue3中watchEffect侦听器的使用

上一节我们学习了 watch 侦听器的基础用法,用来监听页面数据的变化,那么今天呢,我们来学习一下 watch 侦听器的好兄弟 watchEffect 侦听器。这个相对来说比较简单,用的不是很多,当然了,根据自己的项目情况自行决定使用。这个就不详细说了,简单过一下子。

watchEffect 侦听器

其实我觉得这个玩意儿哈,不用也罢,啊哈哈哈哈哈!

怎么说呢,你可以理解成 watch 和 watchEffect 这两个玩意儿的功能是一样的。

watch:显示指定依赖源,依赖源更新时执行回调函数。
watchEffect:自动收集依赖源,依赖源更新时候重新执行自身。

  • watchEffect 如果存在的话,组件初始化的时候就会自动自行一次,不需要像 watch 一样设置立即执行。
  • watch 每次回调之后是可以获取到最新值和上一次的老值,但是 watchEffect 是拿不到的。
  • watchEffect 不需要指定监听的属性,他会自动进行依赖收集,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行,不像 watch 只能监听指定的属性。
  • 使用的时候也是需要引入。
  • 记住一点哈, watch 可以代替 watchEffect,但是 watchEffect 不能替代 watch。

总结:能用 watch 就不要用 watchEffect。

watchEffect 侦听器使用

首先我们写一个简单的 watchEffect 侦听器。

<template>
  <div>
    <h1>{{name}}</h1>
    <button @click="btn">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect } from "vue";
export default {
  name: "App",
  setup() {
    const name = ref("我是??.");

    function btn() {
      name.value = "??.";
    }

    const res = watchEffect(() => {
      console.log("watchEffect 执行了");
    });

    return { name, btn };
  }
};
</script>

记住 watchEffect 使用也是需要先引入的,不然不好使哈,然后我们保存上面的代码,然后刷新页面看一下执行结果。

我们发现哈,我们一刷新页面,控制台直接打印了我们输出的内容,所以说呢,watchEffect 组件一加载完就会执行。

watchEffect 监听基本数据

我们看到,watchEffect 使用的时候并没有设置监听哪个参数,只有一个回调函数,因为他会自动进行依赖收集,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行。

比如我们监听 name 的情况。

<template>
  <div>
    <h1>{{name}}</h1>
    <button @click="btn">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect } from "vue";
export default {
  name: "App",
  setup() {
    const name = ref("我是??.");

    function btn() {
      name.value = "??.";
    }

    const res = watchEffect(() => {
      console.log(name.value);
    });

    return { name, btn };
  }
};
</script>

我们在回调函数打印一下 name 的值。

watchEffect 监听复杂数据

上面的案例是用来监听一个基本数据,如果监听一个对象呢?

其实也是一样的哈。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是??.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log(boy.age);
    });

    return { boy };
  }
};
</script>

上边代码呢,一个按钮,每次点击让 boy 对象里面的 age 加一操作,然后监听一下 age 的新值

可以看到是完全没有问题的哈!

watchEffect 啥时候执行

上边说过了哈,只要我们回调中使用了响应式的属性,那么这些属性在变更之后这个回调都会执行,不像 watch 只能监听指定的属性。

啥意思呢,简单理解一下,就是回调里面使用了的话他就执行,没用他就不执行。

就像上面的案例,修改 age 的时候,我们在回调里面打印了 age,在回调里面涉及到 age 了,他就会执行,如果我们这次不使用改变的 age,只打印一句话,看一下能不能执行回调哈。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是??.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log("执行了");
    });

    return { boy };
  }
};
</script>

刷新保存,点击按钮修改 age 的值,看一下控制台有没有打印 执行了 三个字。

明白那句话了吗?知道什么时候执行了吧? OK。

关闭 watchEffect 监听

假设,我们开始使用了 watchEffect 监听,但是我现在不想让他监听了怎么办呢?其实超级简单。

    const res = watchEffect(() => {
      console.log(boy.age);
    });

上边我们不是创建一个 watchEffect 侦听器了吗?关闭只需要调用一下就关了哈。

res()  // 关闭

下面看具体代码。

<template>
  <div>
    <h1>{{boy.age}}</h1>
    <button @click="boy.age++">修改name</button>
  </div>
</template>

<script>
import { ref, watchEffect, reactive } from "vue";
export default {
  name: "App",
  setup() {
    const boy = reactive({
      name: "我是??.",
      age: 10
    });

    const res = watchEffect(() => {
      console.log(boy.age);
    });

    res()  // 关闭监听

    return { boy };
  }
};
</script>

保存一下,点击按钮看效果。

好了,watchEffect 侦听器基本有法就这样了,没什么难的,所以说很多人都说,哎哟,这个 watchEffect 没什么屁用啊!确实用处不大,但是也不绝对哈,不然作者就不至于在 watch 之外有整一个 watchEffect 了是吧! 但是具体什么用,等你做项目过程中,就知道了!但是,能用 watch 解决的,就不要用 watchEffect !

到此这篇关于一文搞懂Vue3中watchEffect侦听器的使用的文章就介绍到这了,更多相关Vue3 watchEffect侦听器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文搞懂Vue3中watchEffect侦听器的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue3中watchEffect侦听器如何使用

本篇内容介绍了“Vue3中watchEffect侦听器如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!watchEffect 侦听器其
2023-07-02

详解Vue3中的watch侦听器和watchEffect高级侦听器

这篇文章主要介绍了Vue3中的watch侦听器和watchEffect高级侦听器,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

一文搞懂python中Tkinter的使用

本篇文章给大家带来了关于Python的相关知识,其中主要整理了Tkinter的相关问题,Tkinter 是使用 python 进行窗口视窗设计的模块,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】一、前言1.1、Tkinter是什么Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口
2022-07-04

Vue3中的计算属性及侦听器如何使用

这篇文章主要介绍“Vue3中的计算属性及侦听器如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3中的计算属性及侦听器如何使用”文章能帮助大家解决问题。计算属性我们知道,在模板中可以直接通
2023-07-06

一文搞懂Java ScheduledExecutorService的使用

JUC包(java.util.concurrent)中提供了对定时任务的支持,即ScheduledExecutorService接口。本文主要对ScheduledExecutorService的使用进行简单的介绍,需要的可以参考一下
2022-11-13

Vue3中的计算属性及侦听器怎么使用

计算属性我们知道,在模板中可以直接通过插值语法显示一些data中的数据,但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示在模板中使用表达式,可以非常方便的实现,但是设计它们的初衷是用于简单的运算,在模板中放入太多的逻辑会让模板过重和难以维护,并且如果多个地方都使用到,那么会有大量重复的代码所以我们希望将业务逻辑和UI界面进行分离,其中一种方式就是将逻辑抽取到一个method中,但这种做法有以下弊端所有的data使用过程都会变成了一个方法的调用多次获取数据
2023-05-14

一文带你搞懂Vue中Vuex的使用

​ Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态。本文会通过一些简单的示例,为大家详细讲解Vuex的使用,感兴趣的小伙伴可以跟随小编一起学习一下
2022-11-13

一文搞懂VueJs中customRef函数使用

这篇文章主要为大家介绍了VueJs中customRef函数使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-14

一文搞懂Python中subprocess模块的使用

subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。本文将和大家聊聊subprocess模块的使用,需要的可以参考一下
2022-11-21

一篇文章搞懂Vue3中如何使用ref获取元素节点

过去在Vue2中,我们采用ref来获取标签的信息,用以替代传统js中的DOM行为,下面这篇文章主要给大家介绍了关于如何通过一篇文章搞懂Vue3中如何使用ref获取元素节点的相关资料,需要的朋友可以参考下
2022-11-16

编程热搜

目录