watch与watchEffect属性状态侦听器

本文详细介绍了Vue.js中watch与watchEffect属性状态侦听器的用法,包括对象数据源类型、ref和reactive的侦听回调、侦听回调执行选项如immediate和once,以及watchEffect的自动依赖追踪。文章还探讨了两者之间的区别和回调触发时机,帮助开发者更好地理解和运用这些特性。
摘要由CSDN通过智能技术生成
watch与watchEffect属性状态侦听器

前面提到过,计算属性允许声明性地计算衍生值。然而在有些情况下,需要在状态变化时执行一些Effect(额外的逻辑),比如,更改 DOM或是根据异步操作的结果去修改另一处的状态。【应该是作为computed计算属性功能一个补充】

侦听对象数据源类型

watch 侦听器的第一个参数即为侦听对象,它可以是不同形式的“数据”,比如,一个 ref (包括计算属性)对象、一个reactive响应式对象、一个 getter 函数(()=>{})、或多个数据组成的数组;第二个参数为变更发生后触发的回调函数,其入参为被侦听对象表达式结果的解构赋值结果:

const x = ref(0)
const y = ref(0)

// 单个 ref或computed计算属性
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}`)
})

特别提示:侦听对象不能直接为reactive响应式对象的属性,此时,需要将侦听对象变换成getter函数形式。

const obj = reactive({ count: 0 })

// 错误,因为 watch() 得到的参数是一个 number
watch(obj.count, (count) => {
  console.log(`count is: ${count}`)
})

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

与ref、reactive中的响应式连接建立类似,watch侦听也有一个侦听粒度问题,即对象级还是属性级。

ref属性级状态侦听回调

使用 watch 函数在每次响应式状态发生变化时触发回调函数,场景:输入问题,根据问题远程检索问题答案,相同问题则不进行检索,问题中需要输入一个问题标志:“?”:

<s
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南腔北调-pilmar

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值