uni-app学习笔记十一--vu3 watch和watchEffect侦听

一. watch

在有些情况下,我们需要在状态变化时执行一些操作,此时可以使用watch来实现这种效果,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数。watch 的第一个参数可以是不同形式的"数据源":它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组,但是注意:watch 直接侦听响应式对象的属性值。下面我们来看下它的用法

用法1:

javascript 复制代码
<script setup>
	import {ref, watch} from "vue"
	const person = ref({
		name:"Jim",
		age:21
	})
	 watch(person,(oldValue,newValue)=>{
	   console.log("oldValue:"+oldValue)
	   console.log("newValue:"+newValue)
	 })
</script>

用法2(推荐使用):

javascript 复制代码
watch(()=>person.value.name,(newValue)=>{
 	console.log("newValue:"+newValue)
})

用法3(比较耗性能,必要时才使用):开启尝试侦听,立即侦听

javascript 复制代码
watch(person,(newValue)=>{
	console.log(newValue)
},{deep:true,immediate:true})

完整代码:

html 复制代码
<template>
	<view>
		<input type="text" v-model="person.name" />
	</view>
	{{person}}
</template>

<script setup>
	import {ref, watch} from "vue"
	const person = ref({
		name:"Jim",
		age:21
	})
	// watch(person,(oldValue,newValue)=>{
	// 	console.log("oldValue:"+oldValue)
	// 	console.log("newValue:"+newValue)
	// })
	
	// watch(()=>person.value.name,(newValue)=>{
	// 	console.log("newValue:"+newValue)
	// })
	
	watch(person,(newValue)=>{
		console.log(newValue)
	},{deep:true,immediate:true})
</script>

<style lang="scss" scoped>
	       
</style>

需要侦听多个,推荐分开侦听:

javascript 复制代码
//nv new value的缩写 新值  ov老值
watch(firstName,(nv,ov)=>{
 
}

watch(lastName,(nv,ov)=>{
 
})

二.watchEffect

watchEffect() 允许我们自动跟踪回调的响应式依赖,性能消耗较大,一般很少使用。

javascript 复制代码
watchEffect(()=>{
		console.log(firstName.value,lastName.value)
	})

三.watch vs. watchEffect​

watch 和 watchEffect 都能响应式地执行侦听。它们之间的主要区别是追踪响应式依赖的方式:

  • watch 只追踪明确侦听的数据源。它不会追踪任何在回调中访问到的东西。另外,仅在数据源确实改变时才会触发回调。watch 会避免在发生副作用时追踪依赖,因此,我们能更加精确地控制回调函数的触发时机。

  • watchEffect,则会在副作用发生期间追踪依赖。它会在同步执行过程中,自动追踪所有能访问到的响应式属性。这更方便,而且代码往往更简洁,但有时其响应性依赖关系会不那么明确。

相关推荐
叼烟扛炮6 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
陈布衣7 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
缘来是你远去是我11 小时前
本地个人笔记exe
笔记
FakeOccupational11 小时前
【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置
笔记·stm32·实时音视频
迪康coolmu11 小时前
企业U盘管控落地实战:基于迪康端点安全一体化管理系统的移动存储安全实践
运维·人工智能·经验分享·笔记·安全·电脑
码间留白12 小时前
uni-app 鸿蒙离线打包:一个改动从源码到真机要穿过几条链
uni-app·鸿蒙·deveco·离线打包·uts插件
Z21-X14 小时前
云原生运维学习笔记:容器技术的演进、底层原理与 Docker 全生命周期管理
运维·笔记·学习·云原生
Rabitebla1 天前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
小lu飞1 天前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
无心水1 天前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师