vue3中的watch的用法和几种常见情况

本文详细介绍了Vue3中watch函数的使用,包括基本用法、数组和对象监听、配置项、深度监视以及针对不同场景的应用实例。重点讲解了如何监听数值、对象属性及嵌套结构的变化,并展示了配置immediate选项和深度监听的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue3中的watch是一个组合式的API使用时需要引入

watch函数收三个参数:

  1. 需要进行监听的数据的数组,

  2. 监听的数据发生改变时的回调

  3. 配置项

  • 情况一(监视一个数字的变化)

    let count = ref(0) 
    watch(count,(newV,oldV)=>{
        console.log(newV,oldV);
    })
  • 情况二(监听俩个数据的变化)

    let year = ref(2000) 
    let age = ref(22) 
    function count(){
        year.value++
        age.value++
    }
    watch([year,age],(newV,oldV)=>{
        console.log(newV,oldV);
    })

                                       

  • 加入配置项参数

    let year = ref(2000) 
    let age = ref(22) 
    function count(){
        year.value++
        age.value++
    }
    watch([year,age],(newV,oldV)=>{
        console.log(newV,oldV);
    },{immediate:true})  //设置立即监听

                                        会立即监听一次

  • 情况三(监听reactive管理的对象的变化)

    const student = reactive({
           name:'张三',
           age:20,
           a:{
               b:{
                   salary:'20k'
               }
           }
      })
    function changeName(){
        student.name = student.name + '@'
    }
    function changeAge(){
        student.age ++
    }
    function changeSalary(){
        student.a.b.salary = "50k"
    }
    watch(student,(newV,oldV)=>{
        console.log(newV,oldV);
    })

注意:此时的oldValue失效,在监听深层次的数据时依旧可以监听到变化,可以看出vue3默认开启了深度监视

  • 情况4(监听对象中的某个属性)

    //上方代码watch改写为
    watch(()=>student.name,(newValue,oldValue)=>{
        console.log(newValue,oldValue);
    })

                                                    

监听对象的某个属性需要将watch函数的第一个参数写为一个函数需要监听的属性作为返回值,可以正确的获得oldValue

  • 情况5(监听对象的某些属性)

    //watch改写为
    watch([()=>student.name,()=>student.age],(newValue,oldValue)=>{
        console.log(newValue,oldValue);
    })

                                           

监听对象的一些属性传入的第一个参数是存放返回对象属性的函数的数组,oldValue有效

  • 情况6(监听对象套很深的对象的属性)

    const student = reactive({
      a: {
        b: {
          salary: "20k",
        },
      },
    });
    function changeSalary() {
      student.a.b.salary = "50k";
    }
    watch(
      () => student.a,
      (newValue, oldValue) => {
        console.log(newValue, oldValue);
      },
      { deep: true }
    );

                               

监听对象嵌套很深需要开启深度监听,oldValue不好使

Vue 3中,你可以通过使用`watch`选项来监听数据的变化。这里有几种使用`watch`的方式: 1. 直接在选项中使用`watch`:你可以在组件的选项中使用`watch`来监听特定的数据变化。例如: ```javascript export default { data() { return { message: 'Hello, Vue!' } }, watch: { message(newValue, oldValue) { // 当message发生变化时,执行相应的操作 console.log('message变为:', newValue) } } } ``` 2. 使用`$watch`方法:你也可以在组件实例上使用`$watch`方法来监听数据变化。这种方式更加灵活,可以监听任意数据的变化。例如: ```javascript export default { data() { return { message: 'Hello, Vue!' } }, mounted() { this.$watch('message', (newValue, oldValue) => { // 当message发生变化时,执行相应的操作 console.log('message变为:', newValue) }) } } ``` 3. 使用`watch`函数:在Vue 3中引入了一个新的API,可以使用`watch`函数来监听响应式数据。这种方式更加简洁强大,可以处理多个数据的变化。例如: ```javascript import { watch } from 'vue' export default { data() { return { message: 'Hello, Vue!' } }, mounted() { watch(() => this.message, (newValue, oldValue) => { // 当message发生变化时,执行相应的操作 console.log('message变为:', newValue) }) } } ``` 以上是在Vue 3中使用`watch`的几种方式。你可以根据具体需求选择合适的方式来监听数据的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值