Vue3 watch 侦听器 | watchEffect

本文详细介绍了Vue.js中watch和watchEffect的使用及区别。watch用于监听特定数据源并执行副作用,支持深度监听和控制触发时机;而watchEffect则在运行时自动追踪所有依赖并在变化时重新执行。两者的应用场景各有侧重,watchEffect简化了手动管理依赖的步骤,但可能造成响应性关系不清晰。文章还提到了flush选项的差异,如pre和post。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

watch

watch(数据源, 回调, option)

在回调函数中执行 effect 副作用

支持的数据源:

  1. 一个 ref (包括计算属性)
  2. 一个响应式对象
  3. 一个 getter 函数
  4. 多个数据源组成的数组

对于引用类型 默认不监听属性变化,除非设置deep选项,而 reactive 不需要设置 deep
引用类型 的newvalue 和 oldvalue 值一致
如果要监听引用类型的属性 可以用函数返回的写法
在这里插入图片描述

option 属性作用
deep是否对 对象的属性 进行侦听 (对象中对象的属性也会被侦听)
immediate是否立即以表达式的当前值触发回调
flushpre 在渲染前调用回调(默认)
post 将回调推迟到渲染之后
sync一旦值发生变化,回调将被同步调用

watch 与 computed 的区别

watch 允许执行异步操作 (如访问一个 API)
限制我们执行该操作的频率,并在得到最终结果前,设置中间状态。
computed 计算属性无法做到的。

源码

经过一系列判断
最终会调用 doWatch

watchEffect

参数传入一个函数。
返回 停止监听的函数

立即执行传入的一个函数
自动追踪其中依赖,在依赖变更时重新运行该函数

对于有多个依赖项的侦听器来说,使用 watchEffect() 可以消除手动维护依赖列表的负担。

对于副作用直接使用数据源(不包括旧值),且在第一次加载就会执行,
则可以直接使用 watchEffect 取代 watch。写法上更简洁。

调用 watchEffect() 返回的函数可以手动停止监听 (正常会在组件卸载时停止)

watch 与 watchEffect 区别:
watch 只追踪明确侦听的数据源,不会追踪任何在回调中访问到的东西。
watch 会避免在发生副作用时追踪依赖,因此,我们能更加精确地控制回调函数的触发时机。
watchEffect,则会在副作用发生期间追踪依赖。自动追踪所有能访问到的响应式属性。代码往往更简洁,但有时其响应性依赖关系会不那么明确。

watchPostEffect() watchSyncEffect() 仅 flush 选项不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值