Vue3——第六章(侦听器:watch、watchEffect)

news2024/11/27 14:48:13

一、watch 基本使用

  • 在组合式 API 中,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数:
    在这里插入图片描述

二、侦听数据源类型

  • watch 的第一个参数可以是不同形式的“数据源”:它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组:
    在这里插入图片描述
  • 注意,你不能直接侦听响应式对象的属性值,例如:
    在这里插入图片描述
  • 这里需要用一个返回该属性的 getter 函数:
    在这里插入图片描述

三、深层侦听器

  • 直接给 watch() 传入一个响应式对象,会隐式地创建一个深层侦听器——该回调函数在所有嵌套的变更时都会被触发:
    在这里插入图片描述
  • 相比之下,一个返回响应式对象的 getter 函数,只有在返回不同的对象时,才会触发回调:
    在这里插入图片描述
  • 也可以给上面这个例子显式地加上 deep 选项,强制转成深层侦听器:
    在这里插入图片描述
  • 谨慎使用深度侦听需要遍历被侦听对象中的所有嵌套的属性,当用于大型数据结构时,开销很大。因此请只在必要时才使用它,并且要留意性能。

四、watchEffect()

  • watch() 是懒执行的:仅当数据源变化时,才会执行回调。
  • 但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。
  • 举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据。
    在这里插入图片描述
  • 我们可以用 watchEffect 函数 来简化上面的代码。
  • watchEffect() 会立即执行一遍回调函数,如果这时函数产生了副作用,Vue 会自动追踪副作用的依赖关系,自动分析出响应源。
    在这里插入图片描述
  • 这个例子中,回调会立即执行。
  • 在执行期间,它会自动追踪 url.value 作为依赖(和计算属性的行为类似)。每当 url.value 变化时,回调会再次执行。
  • watchEffect 仅会在其同步执行期间,才追踪依赖。在使用异步回调时,只有在第一个 await 正常工作前访问到的属性才会被追踪。

五、watch vs. watchEffect

  • watch 和 watchEffect 都能响应式地执行有副作用的回调。
  • 它们之间的主要区别是追踪响应式依赖的方式:
  • watch :只追踪明确侦听的数据源。它不会追踪任何在回调中访问到的东西。另外,仅在数据源确实改变时才会触发回调。watch 会避免在发生副作用时追踪依赖,因此,我们能更加精确地控制回调函数的触发时机。
  • watchEffect:会在副作用发生期间追踪依赖。它会在同步执行过程中,自动追踪所有能访问到的响应式属性。这更方便,而且代码往往更简洁,但有时其响应性依赖关系会不那么明确。

六、回调的触发时机

  • 当你更改了响应式状态,它可能会同时触发 Vue 组件更新和侦听器回调。
  • 默认情况下,用户创建的侦听器回调,都会在 Vue 组件更新之前被调用。这意味着你在侦听器回调中访问的 DOM 将是被 Vue 更新之前的状态。
  • 如果想在侦听器回调中能访问被 Vue 更新之后的 DOM,你需要指明 flush: ‘post’ 选项:
    在这里插入图片描述
  • 后置刷新的 watchEffect() 有个更方便的别名 watchPostEffect():
    在这里插入图片描述

七、停止侦听器

  • setup() <script setup> 中用同步语句创建的侦听器,会自动绑定到宿主组件实例上,并且会在宿主组件卸载时自动停止。
  • 因此,在大多数情况下,你无需关心怎么停止一个侦听器。
  • 一个关键点是,侦听器必须用同步语句创建:如果用异步回调创建一个侦听器,那么它不会绑定到当前组件上,你必须手动停止它,以防内存泄漏。
    在这里插入图片描述
  • 要手动停止一个侦听器,请调用 watch 或 watchEffect 返回的函数:
    在这里插入图片描述
  • 注意,需要异步创建侦听器的情况很少,请尽可能选择同步创建。如果需要等待一些异步数据,你可以使用条件式的侦听逻辑:
    在这里插入图片描述

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

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

相关文章

5.2、运输层端口号、复用与分用的概念

1、端口号 运行在计算机上的进程使用进程标识符PID\color{red}进程标识符 PID进程标识符PID来标志。 因特网上的计算机并不是使用统一的操作系统 不同的操作系统(windows&#xff0c;Linux&#xff0c;Mac OS)又使用不同格式的进程标识符\color{red}不同格式的进程标识符不同…

ThreadLocal 实战应用

1 什么是 ThreadLocal&#xff1f;ThreadLocal 是一个关于创建线程局部变量的类。通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。而使用 ThreadLocal 创建的变量只能被当前线程访问&#xff0c;其他线程则无法访问和修改。ThreadLocal 在设计之初就是…

CDN简单介绍

CDN 介绍 CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络&#xff0c;服务器的静态资源存在CDN服务器上&#xff0c;用户在最近的CDN服务器上获取资源。 从功能上看&#xff0c;典型的 CDN 系统由分发服务系统、负载均衡系统和运营管理系统组成。分发服务系…

我利用 ChatGPT 提高工作效率的 5 种方式

技术应该是我们的朋友&#xff0c;而不是我们的敌人ChatGPT 在 11 月的发布改变了世界。学校阻止该计划&#xff0c;程序员对他们工作中新发现的效率赞不绝口&#xff0c;而创意人员则怀疑他们的工作是否受到威胁。每个人都在想同一个问题&#xff1a;ChatGPT 的未来会是什么样…

IPS+ESPC联动实现安全中心接管

目录 一、IPS介绍 原理 功能 缺陷 二、ESPC介绍 原理 功能 三、NIPSESPC联动 实验目的 实验过程 一、IPS介绍 原理 如今内部威胁增多&#xff0c;外部攻击剧增&#xff0c;防火墙存在着一定的局限性&#xff0c;如&#xff1a;部署在边界处&#xff0c;更多的是对一些…

环境搭建(python+pycharm(anconda可选)

python下载 python下载&#xff0c;由于网站服务器在国外&#xff0c;所以打开可能有点慢&#xff0c;也可以使用国内的镜像网站&#xff08;因为我没有试过&#xff0c;有兴趣的可以去尝试下&#xff0c;此文章的后面部分会有临时换源的操作&#xff09; 电脑位数的查看 …

1277:【例9.21】方格取数——数字三角形模型

【题目描述】 设有NN的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角A出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#xff0c;直到到达右下角的B点。在走过的路上&…

如何实现同一IP的不同端口访问不同的网站

一&#xff0c;要求 1&#xff0c; 基于同一IP的不同端口访问不同的网站(可以通过域名去访问) ipport1 -> 对应一个域名 ipport2 -> 对应一个域名 使用域名1我应该访问到 ipport1对应的内容 使用域名2我应该访问到 ipport2对应的内容 2. …

阳了怎么居家办公?这4款远程办公软件你得知道!

疫情高峰期尚未过去&#xff0c;可是临近年底&#xff0c;各公司各部门都到了算绩效、追回款、清退结算的时候&#xff0c;大家都忙得根本脱不开身&#xff01;居家远程办公也不得不架起电脑回消息&#xff01; 本文给大家推荐4款超好用的远程办公软件&#xff0c;高效省事&am…

【机器学习 - 1】:knn算法

文章目录机器学习的概念和基础knn算法的实现过程封装knn算法总结机器学习的概念和基础 机器学习可以两类任务&#xff1a; 分类任务和回归任务 以机器学习本身来进行分类可分为&#xff1a; 监督学习 非监督学习 半监督学习 增强学习 监督学习&#xff1a;给机器的训练数据 有标…

android架构拆分方案-结构相关方案与技术

很纯、很生硬的架构技术归纳blog上上文https://blog.csdn.net/dongyi1988/article/details/128617738接上文https://blog.csdn.net/dongyi1988/article/details/128629011android架构官网地址https://source.android.google.cn/docs/core/architecture?hlzh-cnGKI&#xff08;…

VBO、VAO、EBO学习记录

在这里要先了解一下OpenGL的一个幕后大致运作流程&#xff0c;可以直接阅读OPENGL CN 我自己大概总结了一下就是&#xff0c;OpenGL本身就是一个巨大的状态机&#xff0c;我们通过更改状态变量(上下文)来告诉OpenGL如何去绘制图像。一般通过设置选项&#xff0c;修改缓冲来更改…

【网络与系统安全】国科大《网络与系统安全》复习大纲整理 + 考试记忆版

国科大《网络与系统安全》复习整理笔记 重在理解概念考试不算太难 文章目录一、新形势安全面临挑战和安全保障能力提升二、网络与系统安全的需求与目标三、自主与强制访问控制1.访问控制的基本概念2.访问控制的要素3.访问控制3种基本类型4.访问控制矩阵、访问控制列表、访问控制…

【Linux修炼】13.缓冲区

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 缓冲区的理解一. C接口打印两次的现象二. 理解缓冲区问题为什么要有缓冲区缓冲区刷新策略的问题所说的缓冲区在哪里&#xff1f;指的是什么缓冲区&#xff1f;三. 解释打印两次的现象四. 模拟实现五. 缓冲区与OS的关系一. …

ThinkPHP 表单验证使用

对前端或表单请求的数据&#xff0c;一定要做校验&#xff0c;而使用ThinkPHP 验证器则可以事半功倍。 可以使用validate助手函数&#xff08;或者封装验证方法&#xff09;进行验证。TP版本6.1。 目录 验证场景 验证器 创建验证器 定义规则和提示 数据验证 独立验证&…

Arbotix使用

内容学自赵虚左的视频及资料 需求描述: 控制机器人模型在 rviz 中做圆周运动 1.安装 Arbotix 方式1:命令行调用 sudo apt-get install ros-<<VersionName()>>-arbotix <<VsersionName()>> 替换成当前 ROS 版本名称 添加 arbotix 所需配置文件 # …

Web原型设计规范

上篇文章为大家介绍了app端在进行原型设计时的设计规范&#xff0c;本篇将继续为大家介绍一下Web端&#xff08;这里主要指网页端&#xff09;的设计规范。其实web端的设计规范并没有像app端那样多&#xff0c;因为展示的空间比较大&#xff0c;所有要求也就没有那么严苛。 电脑…

Spring_事务

事务的主要内容 事务定义 特性&#xff1a;ACID 并发时产生的问题 事务的隔离级别 锁 事务的传播特性 异常处理 超时 只读事务 TransactionDefinition 并发时产生的问题 一个数据库可以允许多个客户端同时访问&#xff0c;即并发的方式访问数据库。数据库中的同一个数据可能同…

2023年12306购票平台自动化购票终|解决乘客选择与车票提交(附自动化购票完整源代码与演示视频)

目录 一、说明 1.1、背景 1.2、说明 二、步骤 2.1、切换视角检索乘车乘客 2.2、选择乘客 2.3、关闭学生票选择界面 2.4、提交订单 2.5、选择座位并确认 三、完整代码与视频演示 3.1、完整源代码如下 3.2、视频演示代码运行 四、结果 4.1、代码运行结果 五、总结…

windows获取iOS设备信息

依赖环境&#xff1a; 1.python3.6以上版本&#xff0c; 2.配置python的系统环境变量。 3.python已经安装pip。 安装tidevice: 1.打开cmd&#xff0c;输入命令pip3 install -U "tidevice[openssl]"如图所示&#xff0c;安装成功。 2.查看tidevice版本号&#xff0c…