watch与watchEffect

1.使用之前导入

import { ref, reactive, watch, watchEffect } from "vue";

2.watch与watchEffect定义

watch(侦听的响应式引用,回调函数),接收两个参数,第一个是需要监听的对象,第二个是处理函数
watchEffect(回调函数),只接收一个参数,不需要指定监听的属性
在vue3中,均主要用于监听refreactive数据的变化

3.watch与watchEffect使用

//定义counter及相关函数
    const counter = ref(0);
    function changeCounter() {
      counter.value++;
    }
    //watch(侦听的响应式引用,回调函数)
    watch(counter, (newVal, oldVal) => {
      console.log("newVal--->", newVal);
      console.log("oldVal--->", oldVal);
    });
    
//定义user及相关函数    
    const user = reactive({
      name: "张三",
      age: 18,
    });
   function changeUserName() {
      user.name = "李四";
    }
   watch(user.name, (newVal, oldVal) => {
      console.log("newVal--->", newVal);
      console.log("oldVal--->", oldVal);
    }); //不能监听到reactive定义的对象的属性,警告:张三 A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.
    watch(
      () => user.name,
      (newVal, oldVal) => {
        console.log("newVal--->", newVal);
        console.log("oldVal--->", oldVal);
      }
    );//监听对象的属性时,需要使用函数的形式才能正确返回
    
   watchEffect(() => {
      console.log(user.name);
    });// watchEffect(回调函数),注意:不需要指定监听的属性,组件初始化的时候会执行一次回调函数,会自动收集依赖,但无法获取上一次的值

<div>
    <h2>{{ counter }}</h2>
    <button @click="changeCounter">改变counter</button>
    <h2>{{ user.name }}</h2>
    <button @click="changeUserName">改变name</button>
  </div>

4.watch和watchEffect区别:

  • 1.watchEffect不需要指定监听属性,自动收集依赖,只要在回调中引用到了响应式的属性,只要这些属性发生改变,回调就会执行,watch只能监听指定的属性
  • 2.watch可以获取到新值和旧值,watchEffect无法获取上一次的值
  • 3.watchEffect在组件初始化的时候就会自动执行一次,用来收集依赖,而watch是惰性的,在第一次加载时不会执行处理函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值