vue3,watchEffect和watch监听

本文介绍了Vue.js中的watchEffect和watchAPI的用法。watchEffect在函数执行时自动追踪依赖,并在依赖变化时重新运行。它能监听ref和reactive声明的值,但无法监听非ref类型或对象。watchAPI则提供了更灵活的监听方式,可以监听单一源或多个源,包括getter函数返回值。例子展示了如何使用这两个API来监听和响应数据的变化。
摘要由CSDN通过智能技术生成
1.watchEffect
立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。
import { watchEffect,ref,reactive } from 'vue';
// 1-1.监听 ref 声明的值
setup(){
    const count = ref(0);
    watchEffect(()=>{
       console.log(count.value) // 这里的值会被打印两次,0,1
    })
    setTimeout(() => {
      count.value++
      // -> logs 1
    }, 100)
}
// 1-2.监听 reactive 声明的值

setup(){
    const data = reactive({num:0});
    watchEffect(()=>{
       console.log(data.num) // 这里的值会被打印两次,0,1
       console.log(data) // 这里的对象只会被打印一次
    })
    setTimeout(() => {
      data.num++
    }, 100)
}
// 注意: 如果监听函数中打印的是data只会被监听到一次
// 特别注意:watchEffect 并不需要传入具体的监听对象。但是他也同样监听不到 非ref类型,和 getter 函数的变化。

setup(){
    const obj = {age:10};
    watchEffect(()=>{
       console.log(obj.age) // 只能打印一次 10 // 监听不到obj数据的变化
    })
    setTimeout(() => {
      obj.age++
    }, 100)
}
2.watch

watch API 与选项式 API this.$watch (以及相应的 watch 选项) 完全等效

2.1 侦听单一源

侦听器数据源可以是一个具有返回值的 getter 函数,也可以直接是一个 ref:

import { ref,reactive,watch } from 'vue';

// 监听 ref声明的值
setup(){
    const count = ref(0);
    watch(count, (newVal,oldVal)=>{
       console.log(newVal) // 1
       console.log(oldVal) // 0
    })
    setTimeout(() => {
      count.value++
      // -> logs 1
    }, 100)
}

// 监听 getter 也就是说(reactive)声明的值

setup(){
    const data = reactive({
        num:0
    });
    watch(()=>data.num, (newVal,oldVal)=>{
       console.log(newVal) // 1
       console.log(oldVal) // 0
    })
    setTimeout(() => {
      data.num++
      // -> logs 1
    }, 100)
}

2.2 侦听多个源

侦听器还可以使用数组以同时侦听多个源:

import { ref,reactive,watch } from 'vue';

setup(){
  const num = ref(0);
  const number = ref(20);
  watch([num,number],([newNum,newNumber],[oldNum,oldNumber])=>{
      console.log(newNum,oldNum);// 打印 1 0
      console.log(newNumber,oldNumber); // 打印 21 20
    })
    
    setTimeout(()=>{
      num.value++
      number.value++
    },1000)
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值