vue3中watch的用法

一、vue2中watch的用法

 watch属性中,监听sum值的变化

        immediate:true,表示立即监听(页面一加载就能触发);

        deep:true,表示开启深度监听。

watch: {
  sum: {
    handler(newValue, oldValue) {
      console.log('sum的值变化了', newValue, oldValue);
    },
    immediate: true,
    deep: true
  }
},
<template>
  <div class="about">
    <div>当前值为:{{ sum }}</div>
    <button @click="sum++">加一</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  name:'aboutPage',
  watch: {
    sum: {
      handler(newValue, oldValue) {
        console.log('sum的值变化了', newValue, oldValue);
      },
      immediate: true,
      deep: true
    }
  },
  setup() {
    let sum = ref(0)

    return {
      sum
    }
  }
}
</script>

 浏览器控制台输出:

一、vue3中watch的用法 

vue3中的watch为组合式Api中的一个函数。

vue2的watch只能写一个,vue3中可以写多个watch函数,当watch同时监听多个响应式数据时,需要放进一个数组中

(1)监听 ref 定义的响应式数据

情况一:监视ref定义的一个响应式数据

watch(sum, (newValue, oldValue) => {
  console.log('sum变化了', newValue, oldValue);
}, {immediate: true})

情况二:监视ref定义的多个响应式数据

watch([sum,msg], (newValue, oldValue) => {
  console.log('sum或sum变化了', newValue, oldValue);
}, {immediate: true})

(1)监听 reactive 定义的响应式数据 

缺点:

        1、无法正确获取oldValue
        2、强制开启深度监听,deep配置无效

情况三:监听reactive定义的一个响应式数

watch(person, (newValue, oldValue) => {
  console.log('person改变了', newValue, oldValue);
})

情况四:监听reactive定义的一个响应式数据中的某个属性(监听属性需要写成函数形式)

watch(()=>person.name, (newValue, oldValue) => {
  console.log('person的name改变了', newValue, oldValue);
})

情况五:监听reactive定义的一个响应式数据中的多个属性(监听属性需要写成数组包函数形式)

watch([()=>person.name, ()=>person.age], (newValue, oldValue) => {
  console.log('person的name或age改变了', newValue, oldValue);
})

情况六:监听reactive定义的一个响应式数据中深层次的一个属性(特殊情况)

watch(()=>person.job, (newValue, oldValue) => {
  // 页面上修改的其实是job下的j1下的salary属性值, 需要开启深度监听才能触发
  console.log('person的job改变了', newValue, oldValue);
}, {deep: true})

ps:如果对象是ref定义的,监听整个对象时需要写成person.value的形式,或者开启深度监听。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 watch 的使用方式有所变化。下面介绍一下 Vue3 watch用法: 1. 监听单个变量 ```js import { watch } from 'vue'; watch( () => count.value, (newValue, oldValue) => { console.log(`count changed from ${oldValue} to ${newValue}`); } ); ``` 上面代码,`watch` 监听的是 `count.value` 这个变量,当 `count` 的值发生变化时,回调函数就会被触发。 2. 监听多个变量 ```js import { watch } from 'vue'; watch( [count1, count2], ([newVal1, newVal2], [oldVal1, oldVal2]) => { console.log( `count1 changed from ${oldVal1} to ${newVal1}, count2 changed from ${oldVal2} to ${newVal2}` ); } ); ``` 上面代码,`watch` 同时监听 `count1` 和 `count2` 两个变量,当任意一个变量的值发生变化时,回调函数就会被触发。 3. 监听对象或数组 ```js import { watch } from 'vue'; const obj = reactive({ count: 0, name: 'test', }); watch( () => obj, (newVal, oldVal) => { console.log( `obj changed from ${JSON.stringify(oldVal)} to ${JSON.stringify(newVal)}` ); } ); ``` 上面代码,`watch` 监听的是整个对象 `obj`,当 `obj` 任意一个属性的值发生变化时,回调函数就会被触发。 4. 监听异步变量 ```js import { watch, ref } from 'vue'; const count = ref(0); const asyncCount = ref(0); watch( count, async (newVal, oldVal) => { asyncCount.value = await someAsyncFunc(newVal); } ); ``` 上面代码,`watch` 监听的是 `count` 这个变量,回调函数是异步的,当 `count` 的值发生变化时,会调用 `someAsyncFunc` 异步函数,并将返回值赋值给 `asyncCount`。 以上就是 Vue3 watch用法,需要注意的是,在 Vue3 watch 的使用需要引入 `watch` 函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值