vue中watch的使用(主要介绍了vue2和vue3中watch的区别)

watch的使用: 这里介绍的是vue2和vue3中的用法

  1. vue2中的用法:
    1.sum属性为例:写法一:
  watch: {
    sum (newValue, oldValue) {
      console.log("sum的数值的变换.....", newValue, oldValue);
    }
  },

2.sum属性为例: 写法二:

 watch: {
    sum: {
      handler (newvak, old) {
        console.log(newvak, old)
      },
      immediate: true, //立即监听
      deep: true // 深度监听
    }
  },

vue3中watch的使用
1.监听ref的单一属性:

   监听ref单一值的变化
    watch(sum, (newvAL, oLdVal) => {
      console.log(newvAL, oLdVal)
    })
  1. 监听ref多个属性的变化
  // 监听ref多个值的变化
    watch([msg, sum], (newVal, oldVal) => {
      console.log(newVal, oldVal)
    })

3.监听reactive中数据的变化

 // 监听reactive中的person对象
    // 注意: 此处无法正确获取OldVal的变化
    // 此时开始深度监听无用
    watch(person, (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    }, {deep: true})

4.监听reactive对象中的一个属性的变化

 // 写法四:
    // 监听reactive对象中一个属性的变化
    watch(() =>person.name, (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    })

写法五

 watch([() =>person.name, ()=> person.age], (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    })

写法六:

 watch([() => person.job], (newVal, oldVak) => {
      console.log(newVal, oldVak)
    }, {deep: true})

全部代码:

<template>
  <div class="watchDemo">
    <h2>vue2和vue3中watch的使用</h2>
    <div>
      <div>求和:{{ sum }}</div>
      <div>msg: {{ msg }}</div>
      <div>姓名: {{ person.name }}</div>
      <div>年龄: {{ person.age }}</div>
      <div>薪资:{{ person.job.sary + 'k' }}</div>
      <button @click="updateHandler">修改msg</button>
      <button @click="addHandler">+1</button>
      <button @click="updateName">修改姓名</button>
      <button @click="addAge">添加年龄</button>
      <button @click="addSary">涨薪资</button>
    </div>
  </div>
</template>
<script>
import { ref, watch, reactive } from 'vue'
export default {
  name: 'watchDemo',
  // watch: {
  //   sum (newValue, oldValue) {
  //     console.log("sum的数值的变换.....", newValue, oldValue);
  //   }
  // },
  // watch: {
  //   sum: {
  //     handler (newvak, old) {
  //       console.log(newvak, old)
  //     },
  //     immediate: true, //立即监听
  //     deep: true // 深度监听
  //   }
  // },
  setup () {
    let sum = ref(0)
    let msg = ref('你好啊')
    let person = reactive({
      name: 'zs',
      age: 20,
      job: {
        sary: 20
      }
    })
    const addHandler = () => {
      sum.value+=1
    }
    const updateHandler = () => {
      msg.value += '~~'
    }
    const updateName = () => {
      person.name = 'lisi'
    }
    const addAge = () => {
      person.age += 10
    }
    const addSary = () => {
      person.job.sary += 10
    }
    // 监听ref单一值的变化
    // watch(sum, (newvAL, oLdVal) => {
    //   console.log(newvAL, oLdVal)
    // })
    // watch(msg, (newVal, oldVal) => {
    //   console.log(newVal, oldVal)
    // })
    // 监听ref多个值的变化
    watch([msg, sum], (newVal, oldVal) => {
      console.log(newVal, oldVal)
    })
    // 监听reactive中的person对象
    // 注意: 此处无法正确获取OldVal的变化
    // 此时开始深度监听无用
    watch(person, (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    }, {deep: true})
    // 写法四:
    // 监听reactive对象中一个属性的变化
    watch(() =>person.name, (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    })
    //   watch([() =>person.name], (newVal, oldVal)=> {
    //   console.log(newVal, oldVal)
    // })
      watch([() =>person.name, ()=> person.age], (newVal, oldVal)=> {
      console.log(newVal, oldVal)
    })
    watch([() => person.job], (newVal, oldVak) => {
      console.log(newVal, oldVak)
    }, {deep: true})
    return {
      sum,
      person,
      addHandler,
      updateHandler,
      msg,
      addAge,
      addSary,
      updateName
    }
  }
}
</script>
<style scoped>
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值