#Vue3篇:watch、watchEffect、watchPostEffect、watchSyncEffect的区别

Vue 3 中的 watch、watchEffect、watchPostEffect 和 watchSyncEffect 都是用于监视响应式数据变化的 API,但它们之间有一些区别,下面详细介绍它们的使用方法和不同之处。

watch

watch 是 Vue 2 中的 API,Vue 3 中也保留了这个 API。它是一个侦听器,可以用于侦听单个变量或对象的属性,可以传入一个回调函数,在值变化时执行该函数。

watch(() => count.value, (newValue, oldValue) => {
  console.log(`count 值从 ${oldValue} 变为 ${newValue}`)
})

上面的代码使用了 watch API 监听了 count 变量的变化,当 count 的值发生变化时,控制台就会输出新旧值。

监听的类型
  1. ref监听的基本类型;

  2. ref监听的对象类型;

  3. –reactive经过watch监听的是深度监听;reactive对象里面某个属性,监听的字段换成函数

  4. reactive对象里面某个属性是对象,监听的字段可以换成函数也可以对象(对象某个 对象整体都变 加deep: true)

  5. 监听多个属性

    watch(() => {},() => {
    
    })
    
    watch([(]) => {}],() => {
    
    })
    

watchEffect

定义

立即运行一个函数,同花顺响应式地追踪器依赖,并在依赖更改时重新执行该函数。

watchEffect 是 Vue 3 中新增的 API,它接受一个函数作为参数,会自动执行这个函数,并在函数执行过程中收集函数所依赖的响应式数据。如果在函数执行过程中访问了某个响应式数据,那么当这个响应式数据发生变化时,watchEffect 会自动重新执行该函数。watchEffect 的回调函数没有传递新值和旧值的参数。

const count = ref(0)
watchEffect(() => {
  console.log(`count 值为 ${count.value}`)
})

上面的代码使用了 watchEffect API 监听了 count 变量的变化,并在回调函数中打印出 count 的值。

watch和watchEffect的区别

watch要明确指出监听的数据

watchEffect不用明确指出监视的数据

watchPostEffect

watchPostEffect 也是 Vue 3 中新增的 API,它接受一个函数作为参数,和 watchEffect 类似,会自动执行这个函数,并在函数执行过程中收集函数所依赖的响应式数据。但是和 watchEffect 不同的是,watchPostEffect 会在函数执行结束后再次执行一次,这次执行没有任何的依赖追踪。

const count = ref(0)
watchPostEffect(() => {
  console.log(`count 值为 ${count.value}`)
})

上面的代码使用了 watchPostEffect API 监听了 count 变量的变化,并在回调函数中打印出 count 的值。和 watchEffect 不同的是,watchPostEffect 会在函数执行结束后再次执行一次。

watchSyncEffect

watchSyncEffect 也是 Vue 3 中新增的 API,它接受一个函数作为参数,和 watchEffect 类似,会自动执行这个函数,并在函数执行过程中收集函数所依赖的响应式数据。但是和 watchEffect 不同的是,watchSyncEffect 会立即执行一次回调函数,而不是等到下一个事件循环才执行。

<template>
  <div>
    <p>{{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script setup lang="ts">
import { ref, watchSyncEffect } from "vue"

const count = ref(0)

const increment = () => {
  count.value++
}

watchSyncEffect(() => {
  console.log(`Count is now ${count.value}`)
})
</script>

</script>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值