vue3学习 【5】watch的使用

什么是watch

当我们需要根据一个数据的变化来进行一些操作的时候我们需要使用侦听器,它能够在响应式数据发生变化的时候触发提供的回调函数

基础侦听

watch 可以侦听不同的数据源。例如:

  1. ref
  2. 计算属性
  3. 响应式对象
  4. getter函数
  5. 多个数据源组层的数据
const x = ref(0)
const y = ref(0)// 单个 ref
watch(x, (newX) => {console.log(`x is ${newX}`)
})// getter 函数
watch(() => x.value + y.value,(sum) => {console.log(`sum of x + y is: ${sum}`)}
)// 多个来源组成的数组
watch([x, () => y.value], ([newX, newY]) => {console.log(`x is ${newX} and y is ${newY}`)
})

不能直接侦听响应式对象的属性,应使用如下代码

// 提供一个 getter 函数
watch(() => obj.count,(count) => {console.log(`count is: ${count}`)}
)

深层侦听器

如果直接传入响应式对象,会默认创建深层监听,该回调函数会在所有嵌套的数据是触发。
如果我们想只监听对象中的某个属性发生变化在触发则使用如下代码.

watch(() => state.someObject,() => {// 仅当 state.someObject 变化时触发}
)

如果我们想要显式的声明可以使用watch的第三个参数{deep:treue}来转换为强制侦听。

立即执行

有时候我们需要一进入页面就执行侦听器一次,那我们可以使用watch的第三个参数{immediate:treue}`来立即执行。

watchEffect的使用

  1. watchEffect 是立即执行一次的,不需要指定immediate
  2. watch 只会追中明确侦听的数据源,而watchEffect 会自动追中所有能访问到的响应式数据。
watchEffect(async () => {const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)data.value = await response.json()
})

TIP
watchEffect 仅会在其同步执行期间,才追踪依赖。在使用异步回调时,只有在第一个 await 正常工作前访问到的属性才会被追踪。

回调触发时机

默认情况下,侦听器回调会在父组件更新 (如有) 之后、所属组件的 DOM 更新之前被调用。这意味着如果你尝试在侦听器回调中访问所属组件的 DOM,那么 DOM 将处于更新前的状态。

如果想在侦听器回调中能访问被 Vue 更新之后的所属组件的 DOM,你需要指明 flush: ‘post’ 选项:

watch(source, callback, {flush: 'post'
})watchEffect(callback, {flush: 'post'
})

后置刷新的 watchEffect() 也可以使用 watchPostEffect()

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

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

相关文章

20240229金融读报:央行阿拉善创新融资模式与碳排放权交易条例实施,新春政策聚焦新生产力及金融风险防范

1、人民银行阿拉善盟分行实例:再贷款产业链(活体牲畜抵押贷款牲畜死亡率保险)、“再贷款新型农牧业经营主体”(基础设施薄弱、产业结构单一,筹集资金创办嘎查集体经济股份合作社贷款) 2、建设银行实例&…

oracle11安装及使用

安装oracle11 官网下载地址 Oracle Database 11g Release 2 for Microsoft Windows (x64) 官网下载慢可访问我的资源 也可以网盘获取 链接:https://pan.baidu.com/s/1RDrGkqDA7tfKRnpJXUBMDw 提取码:z3na 上传安装包到服务器 在指定目录下创建文件…

adb命令

1. 常用命令: adb devices #查看连接设备adb -s cf27456f shell # 指定连接设备使用命令adb install test.apk # 安装应用adb install -r demo.apk #安装apk 到sd 卡:adb uninstall cn.com.test.mobile #卸载应用,需要指定包adb uninstall -…

Windows系统x86机器安装龙芯(loongarch64)3A5000虚拟机系统详细教程

本次介绍在window系统x86机器上安装loongarch64系统的详细教程。 1.安装环境准备。 首先,你得有台电脑。 配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决…

leetcode:860.柠檬水找零

题意:按照支付顺序,进行支付,能够正确找零。 解题思路:贪心策略:针对支付20的客人,优先选择消耗10而不是消耗5,因为5可以用来找零10或20. 代码实现:有三种情况(代表三种…

vscode中使用python的cv2.imread()读取图片为None

这是之前的代码: import cv2img_path c:\\Users\\LENOVO\\Desktop\\QQ截图20240228234801.jpg print(img_path) print(cv2.__version__)img cv2.imread(img_path) print(img)运行结果: c:\Users\LENOVO\Desktop\QQ截图20240228234801.jpg 3.4.1 None…

Linux下主线程 return 0 和 pthread_exit(NULL) 的区别

1. 背景 在Linux环境下,主线程以return 0结束时,程序会在主线程运行完毕后结束。而当主线程以pthread_exit(NULL)作为返回值时,主线程会等待子线程结束后才会退出程序。本文将详细探讨这两种方式的区别,并提供相应的代码示例。 …

String类的使用

String常用的构造方法 String的源码 内部是一个数组和hash值,涉及到常量池后续补充(常量池:存储相同的字符时只会存储一租) String的比较 equals()与:String里面为我们提供了许多方法,可直接调用&#xf…

2024最新-ubuntu22.04安装最新版QT6.6~6.8教程

​ 1. 在官网下载 online_installer: https://download.qt.io/archive/online_installers/4.7/qt-unified-linux-x64-4.7.0-online.run 或者直接镜像站下载: http://mirrors.ustc.edu.cn/qtproject/archive/online_installers/4.7/qt-unified-linux-x6…

数据结构之二叉树的精讲

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

苹果汽车项目的败局:起步失误与方向迷茫

苹果汽车的发展方向内部分歧导致项目多年挣扎,最终在本周宣布终止。 Brian X. Chen 和 Tripp Mickle 从项目初期就开始关注苹果的汽车项目。 在过去十年中,许多参与苹果秘密汽车项目“泰坦”(内部代号)的员工戏称其为“泰坦尼克…

Python实现链表:从基础到应用

一、引言 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表在内存中的存储不是连续的,这使得它在插入和删除操作上具有较高的效率。本文将使用Python语言来实现一个简单的链表,并展示其…

【前端面试题1】伪类与伪元素有什么区别

伪类与伪元素的区别: 1.伪类使用单冒号,而伪元素使用双冒号。如 :hover 是伪类,::before 是伪元素 2.伪元素会在文档流生成一个新的元素,但伪元素本身并不是DOM元素,并且可以使用 content 属性设置内容 CSS伪类与伪元…

卷积神经网络基本概念补充

卷积(convolution)、通道(channel) 卷积核大小一般为奇数,有中心像素点,便于定位卷积核。 步长(stride)、填充(padding) 卷积核移动的步长(stride…

小白提示您:FaceTime诈骗持续高发,小伙伴们谨防诈骗!

前几天小白的iPhone突然接到了个FaceTime通话请求,说是某抖音账号需要续费啥的才能解锁某些功能。(具体小白也记不太清了) 这几天也有朋友说有个支付宝客服打FaceTime通话给他说快递出现了点问题,需要操作认证一下才能退款啥的。…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程: 进程是操作系统分配资源的基本单位,每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配内存。进程间通信比较复杂,需要用到IPC(InterP…

js监听F11触发全屏事件

当用户使用 F11 键进行浏览器全屏时,由于此时并非通过浏览器提供的 Fullscreen API 进入全屏模式,因此无法通过 fullscreenchange 事件来监听全屏状态的变化。在这种情况下,可以通过监听 resize 事件来检测浏览器窗口大小的变化,从…

【学习日记】快速排序

思想 快速排序之所以快,一个重要原因就是其每一次遍历,都把本轮要排序的数字(称为轴)放到了最终的位置上快排使用分治思想,所以一般采用递归实现,非递归版本可以用栈根据第一点,我们需要一个函…

[渗透教程]-006-渗透测试-Metasploit

文章目录 1.Metasploit简介2.配置2.1方法1 推荐2.2方法23.使用4. Metasploitable2-linuxMetasploit攻击流程攻击实例步骤会话管理1.Metasploit简介 Metasploit是一个渗透测试平台,使您能够查找,利用和验证漏洞.是一个免费的可下载的,通过它可以很容易对计算机软件漏洞实施攻击.…

AttributeError_ ‘list‘ object has no attribute ‘view‘

问题描述 训练yolov9的时候遇到了下面的问题。 In loss_tal.py: pred_distri, pred_scores torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split( (self.reg_max * 4, self.nc), 1) The error is as follows: AttributeError: list …