vue中watch的使用

本文详细介绍了Vue.js中watch的三种用法,包括基础的监听处理函数、字符串形式的方法名以及对象形式的配置。重点讨论了immediate属性用于控制初次绑定时是否执行处理函数,以及deep属性在监听对象属性变化时的作用。同时,提供了针对数组和对象深度监听的解决方案,并展示了如何优化监听特定对象属性的方法。
摘要由CSDN通过智能技术生成

在vue中,使用watch来响应数据的变化。watch的用法大致有三种。下面代码是watch的一种简单的用法:

<input type="text" v-model="cityName"/>
new Vue({
  el: '#root',
  data: {
    cityName: 'shanghai'
  },
  watch: {
    cityName(newName, oldName) {
      // ...
    }
  }
})

直接写一个监听处理函数,当每次监听到 cityName 值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

watch: {
    cityName: 'nameChange'
    }
 }

immediate和handler
这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true。

new Vue({
  el: '#root',
  data: {
    cityName: ''
  },
  watch: {
    cityName: {
      handler(newName, oldName) {
        // ...
      },
      immediate: true
    }
  }
})

监听的数据后面写成对象形式,包含handler方法和immediate,之前我们写的函数其实就是在写这个handler方法;

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。
deep
当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

<input type="text" v-model="cityName.name"/>

new Vue({
  el: '#root',
  data: {
    cityName: {id: 1, name: 'shanghai'}
  },
  watch: {
    cityName: {
      handler(newName, oldName) {
      // ...
    },
    deep: true,
    immediate: true
    }
  }
})

设置deep: true 则可以监听到cityName.name的变化,此时会给cityName的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

watch: {
    'cityName.name': {
      handler(newName, oldName) {
      // ...
      },
      deep: true,
      immediate: true
    }
  }

这样只会给对象的某个特定的属性加监听器。

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3watch使用方式有所改变Vue 3引入了一个新的API即`watchEffect`,它可以用来监听响应式数据的变化并执行相应的操作。 `Effect`函数接受一个回调函数作为参数,该调函数会在响应式数据发生化时被调用。在回调函数,你可以执行任何需要的操作,比如更新DOM、发送网络请求等。 下面是一个使用`Effect`的示例: ```javascript import reactive, watchEffect } from 'vue'; const state = reactive({ count: 0, }); watchEffect(() => { console.log('count changed:', state.count); }); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例,我们创建了一个响应式对象`state`,其包含一个属性`count`。然后,我们使用`watchEffect`来监听`state.count`的变化,并在每次变化时打印出新的值。 除了`watchEffect`,Vue 3还提供了`watch`函数,它可以用来监听指定的响应式数据或计算属性的变化。与Vue 2的`$watch`方法类似,你可以通过传递一个回调函数和可选的配置选项来使用它。 下面是一个使用`watch`的示例: ```javascript import { reactive, watch } from 'vue'; const state = reactive({ count: 0, }); watch( () => state.count, (newValue, oldValue) => { console.log('count changed:', newValue); } ); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例,我们使用`watch`来监听`state.count`的变化,并在每次变化时打印出新的值。回调函数的第一个参数是新的值,第二个参数是旧的值。 总结一下,Vue 3watch使用方式有两种:`watchEffect`和`watch`。`watchEffect`用于监听响应式数据的变化,而`watch`用于监听指定的响应式数据或计算属性的变化。 --问题--: 1. Vue 3watch有哪些使用方式? 2 如何使用watchEffect来监听响应式数据的变化? 3. 如何使用watch来监听指定的响应式数据或计算属性的变化?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的小鸟鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值