Vue3 中组合式下的侦听器

news2024/11/18 21:44:29

目录

  • 前言:
  • 前置代码:
  • 创建侦听器
  • 停止侦听器
  • watch侦听:对象中的某一个属性变化(需要提供getter函数才行)
  • watch侦听:整个对象
  • watch侦听:如果嵌套属性发生改变,默认是无法执行回调函数的?
  • watch侦听:侦听多个数据源组成的数组
  • watchEffect:
  • watchPostEffect:
  • 总结:

前言:

今天小编给大家讲解一下,Vue3 中组合式下的侦听器。

我正在参加 2022年「博客之星」年度总评选,请大家帮我支持一下,给我一个五星。
|
点击前往我的评选页面:
|
在这里插入图片描述
大家只要按图给我五星即可,谢谢大家的帮助。


前置代码:

下面的所有代码都写在前置代码的 script 标签中

<script setup>
// 1. 原始类型
import { ref, reactive, watch, watchEffect, watchPostEffect } from "vue";
// 账号
const account = ref("abc");
// 员工
const emp = reactive({
  name: "Jack",
  salary: 8000,
});
// 部门
const dept = reactive({
  id: "101",
  name: "技术部",
});
</script>

创建侦听器

侦听:原始类型的数据变化
watch(source,callback,options)

  1. source 需要监听的数据源
  2. callback 执行的回调函数,参数1:新值,参数2:旧值
  3. options 配置项 Object类型(按需使用)
    1. deep:true
    2. immediate:true
    3. flush:‘post’
watch(account, (newData, oldData) => {
  console.log("---账号的新旧值---");
  console.log(newData);
  console.log(oldData);
  console.log("-----------------");
});

停止侦听器

停止侦听器:调用watch() 返回的函数即可

// 需要自行停止侦听器时,可以调用 $watch() 返回的函数
let stopWatch = watch(account, (newData, oldData) => {
console.log("---账号的新旧值---");
console.log(newData);
console.log(oldData);
console.log("-----------------");
});
setTimeout(() => {
  stopWatch();
}, 3000);

watch侦听:对象中的某一个属性变化(需要提供getter函数才行)

watch(
  () => emp.salary,
  (newData, oldData) => {
    console.log("---薪资的新旧值---");
    console.log(newData);
    console.log(oldData);
    console.log("-----------------");
  }
);

watch侦听:整个对象

watch(emp, (newData, oldData) => {
  console.log("---信息的新旧值---");
  console.log(newData);
  console.log(oldData);
  console.log("-----------------");
});

watch侦听:如果嵌套属性发生改变,默认是无法执行回调函数的?

解决1:侦听指定的属性(如果属性过多,如果属性名未知)
解决2:配置深度侦听(新旧值相等,无法获取到旧值)

watch(
  () => dept,
  (newData, oldData) => {
    console.log("---部门的新旧值---");
    console.log(newData);
    console.log(oldData);
    console.log("-----------------");
  },
  {
    deep: true,
  }
);

watch侦听:侦听多个数据源组成的数组

watch(
  [account, () => emp.salary, dept],
  // 回调函数中:参数1:新值的数组,参数2:旧值的数组
  ([newAccount, newSalary, newDept], [oldAccount, oldSalary, oldDept]) => {
    console.log("---账号的新旧值---");
    console.log(newAccount);
    console.log(oldAccount);
    console.log("---薪资的新旧值---");
    console.log(newSalary);
    console.log(oldSalary);
    console.log("---部门的新旧值---");
    console.log(newDept);
    console.log(oldDept);
    console.log("-----------------");
  }
);

watchEffect:

watchEffect() 会立即执行一遍回调函数,如果这个时候函数产生了副作用,
Vue 会自动追踪副作用的依赖关系,自动分析出响应源
回调函数中用到的数据源,如果发生了改变,会自动监听,并重新执行该函数

watchEffect(() => {
  // 回调函数中用到的数据源,如果发生了改变,会自动监听,并重新执行该函数
  console.log("账号:" + account.value);
  console.log("薪资:" + emp.salary);
  console.log(document.getElementById("main"));
});

watchPostEffect:

回调的触发时机:默认情况下,创建的侦听器,都会在Vue组件更新状态之前调用,所以获取的都是DOM更新之前的状态

如果想访问更新之后的状态呢?

  1. 添加配置项 flush:‘post’
  2. 调用更方便的别名 watchPostEffect()
    watchEffect() 和 watchPostEffect() 这两个函数的停止侦听
    和 watch 完全一致,都是调用返回的函数即可
let stopPost = watchPostEffect(() => {
  console.log("部门:" + dept.name);
  console.log(document.getElementById("main"));
});

总结:

  1. watch:(手动性)

    1. 显式的指定依赖数据,依赖数据更新时,才会执行回调函数
    2. 具有惰性,第一次页面展示的时候不会执行,只有当指定的数据源发生改变时,才会执行;
    3. 监听ref定义的响应式数据时,可以获取到原值;
    4. 即要指明监听的属性,也要指明监听的回调;
  2. watchEffect:(自动性)

    1. 自动收集依赖数据,依赖数据更新时,重新执行回调函数
    2. 立即执行,没有惰性,页面首次加载就会执行
    3. 无法获取到原值,只能得到变化后的值(新值)
    4. 不能指明监视那个属性,监听的回调中,用到那个属性就监听那个属性

最后还请大家帮我点击一下,谢谢大家的帮助

我正在参加 2022年「博客之星」年度总评选,请大家帮我支持一下,给我一个五星。
|
点击前往我的评选页面:
|
在这里插入图片描述
大家只要按图给我五星即可,谢谢大家的帮助。


以上就是 Vue3 中组合式下的侦听器,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器

1. 杂谈 作为一名十多年游戏王玩家&#xff0c;学生时代玩的是PSP和PS2上的游戏&#xff0c;到毕业后使用YGOPRO同步新卡片进行联网对战&#xff0c;再到现在约到线下进行实体卡片游戏。有些卡片价格太贵&#xff0c;因此我们对于这些卡在未购买之前都会自己打印出来暂时游玩…

sec5-属性

1 属性 GObject系统提供属性。属性是由实例保存的值&#xff0c;实例是GObject的后代&#xff0c;它们对其他实例开放。可以通过他们的名字访问他们。 例如&#xff0c;GtkWindow具有"title"、“default-width”、"default-height"等属性。字符串"t…

正经科普:DDos高防ip详解

白衬衫容易发黄&#xff0c; 一般洗衣液很难洗掉&#xff0c; 不少人为此感到头疼&#xff0c; 不妨在洗的时候吃点头痛药。 这边我也不多废话,大家直接看图,高防ip原理如下清洗能力 DDoS高防IP采用BGP链路对接全国各地30家运营商&#xff0c;总防御能力超4T。采用电信云堤近源…

智能优化算法:人工兔优化算法-附代码

智能优化算法&#xff1a;人工兔优化算法 摘要&#xff1a;人工兔优化算法( [Artificial rabbits optimization&#xff0c;RSO)是 Liying Wang等 于 2022 年提出的一种新型元启发式优化算法 。 该算法受来源于自然界中兔子的生存策略的启发&#xff0c;具有寻优能力强&#x…

【2.1】服务拆分--案例Demo

服务拆分--案例Demo服务拆分注意事项&#xff1a;导入服务拆分Demo测试结果&#xff1a;总结知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。 服务拆分注意事项&#xff1a; 比如现在有一个需求&#xff0c;是查询订单&#x…

国产GPU芯片突破重围,迎来新发展,中国崛起的力量

最近&#xff0c;在GPU芯片领域我们终于迎来新进展&#xff0c;有望突破欧美企业垄断&#xff0c;实现完全国产化。高端GPU芯片对科技发展有着重要作用&#xff0c;广泛应用于云上服务、高密度高性能计算等领域&#xff0c;然而绝大部分GPU芯片市场都被英伟达、AMD、微软等国外…

骨传导耳挂式耳机排名前十名,最好的骨传导耳机推荐

挂耳式的骨传导耳机在佩戴时更舒适以及更加牢固&#xff0c;日常在多种场景使用都能完全兼顾。但是最好的骨传导耳机有哪些呢&#xff1f;还不知道如何选择骨传导耳机&#xff0c;可以看看这五款骨传导耳机~ 1、南卡Runner Pro4骨传导蓝牙耳机 &#xffe5;1498 选择骨传导耳机…

Kubernetes那点事儿——控制器Deployment

K8s应用程序生命周期管理——控制器Deployment一、部署应用程序流程二、Deployment控制器1、应用升级、弹性伸缩、回滚、删除2、滚动升级、回滚机制3、定义Deployment前言说到K8s程序的生命周期管理我们不得不提到k8s的控制器。其中Deployment是最为常用的controllers&#xff…

Liga妙谈 | 如何快速甄别、高效响应用户反馈?

敏捷开发说要「拥抱变化」&#xff0c;在充满不确定的环境中&#xff0c;唯一不变的正是变化。面对源源不断的市场反馈和需求变更&#xff0c;敏捷团队应该如何平衡「高效迭代」与「响应用户」的关系&#xff0c;既快又好地完成研发任务&#xff0c;交付业务价值&#xff1f; …

FFmpeg 滤镜详解

FFmpeg Filter 1. 概念介绍 在多媒体处理中&#xff0c;术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。 2. 基本原理 ● 在编码前&#xff0c;ffmpeg可以对raw&#xff08;真实/原&#xff09;音频和视频使用libavfilter库中的滤镜进行处理。(非压缩…

骨感传导蓝牙耳机怎么样、骨感传导蓝牙耳机有什么特点

在正文开始前&#xff0c;先跟大家说明一下&#xff0c;骨感传导其实就是我们常说的骨传导&#xff0c;两者是相同的意思&#xff0c;只是表达的文字不太一样。我们可以理解为骨感传导耳机骨传导耳机&#xff0c;那既然是这样&#xff0c;骨传导耳机又是利用什么原理传播声音的…

CentOS搭建web服务器,并内网穿透实现公网访问

在web项目中,部署的web站点需要被外部访问,则需要一个媒介,通过把资源放在这个媒介中,再通过所暴露的端口指向这个站点,当外部访问这个媒介所对应的端口时,媒介指向站点,完成访问,像这种类似的媒介,常用的有tomcat容器、Apache等,这边使用Apache来建搭建。 Apache2 是一种流行…

一节摹课丨做会动的电子贺卡,当懂浪漫的成年人

你正在阅读摹客全新内容栏目【一节摹课】。 本栏目会通过一些有趣的、实用的、好看的、新潮的实操案例&#xff0c;分享摹客“设计12”产品矩阵 —— 「1个协作平台2款设计工具」的具体操作妙计&#xff01; 带大家一步一步地解锁摹客协作、摹客RP、摹客DT中的大小功能。 一…

非正式全面解析 NebulaGraph 中 Session 管理

NebulaGraph 论坛最近有些讨论帖&#xff0c;各种姿势来问 NebulaGraph Session 管理相关的事情&#xff0c;我寻思这也不是一个法子&#xff0c;还是来写一篇文章来讲述下 NebulaGraph 中的 Session 管理。由于本文设定为非正式的 Session 讲解&#xff0c;所以本文主要分为理…

智能车|直流电机、编码器与驱动器---编码器

智能车|直流电机、编码器与驱动器---编码器编码器编码器简介编码器的工作原理四倍频采集编码器采集程序实现编码器 编码器简介 编码器是一种将角位移或者直线位移转换成一连串电数字脉冲的一种传感器。 可以通过编码器测量电机转动的位移或者速度信息。 编码器按照工作原理…

FTP多目录和多用户配置(用户隔离/虚拟目录)

FTP多目录和多用户配置&#xff08;用户隔离/虚拟目录&#xff09; 假设有四个部门分别是user1、user2、user3、admin。要求四个部门都有各自有独立的访问目录&#xff0c;且admin部门可以访问其他部门的文件但不能对其进行修改。 1、创建ftp文件→再创建LocalUser&#xff08;…

【图像处理OpenCV(C++版)】——3.1几何变换之仿射变换

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

CSS 颜色

文章目录CSS 颜色关键字 & 十六进制 & RGBopacity 透明度RGBA 颜色CSS3 渐变线性渐变径向渐变CSS 颜色 关键字 & 十六进制 & RGB W3C十六色 opacity 透明度 语法 opacity: 数值;说明 在CSS3中&#xff0c;我们可以使用opacity属性来定义元素的透明度。 o…

excel排序求和:如何统计前几名数据合计 下篇

上次咱们说到一个公式SUM(LARGE(B:B,ROW(INDIRECT("1:"&H2))))&#xff0c;其中的ROW(INDIRECT("1:"&H2))这部分如果写成ROW(1:H2)就会报错&#xff1a; 原因也告诉大家了&#xff0c;就是ROW函数的参数只能使用单元格或单元格区域。 因此解决的办…

Java IO流 - 字节流的使用详细介绍

文章目录IO流的基本介绍字节流的使用文件字节输入流创建字节输入流每次读取一个字节每次读取一个数组一次读取全部字节文件字节输出流创建字节输出流写入文件输出流文件拷贝练习IO流的基本介绍 IO流的概述: I 表示intput&#xff0c;是数据从硬盘文件读入到内存的过程&#xf…