Vue3数据监听watch

        有时候希望某个数据发生变化时,能够得到监视并处理,这时用watch函数最合适不过

watch函数定义

函数声明:watch(monitorData, handlerFunction, config)

  • monitorData要监听的数据
  • handlerFunction监听数据处理函数,这个函数第一个参数监听数据的旧值,第二个参数监听数据的新值
  • config配置对象,设置deep为true开启深度监听,immediate为true立刻执行一次

数据监听

定义如下的数据模型,clazz代表班级,student代表学生

const clazz = ref('')
const clazz2 = ref('')
const student = ref({
    name: '222',
    age: ''
})

以下情况全是使用ref()函数的情况

1)监视基本数据类型

① 直接监听

watch(clazz, (newValue, oldValue) => {
    console.log('班级','新值:', newValue, '旧值:', oldValue)
})

② 通过函数监听,需要通过.value属性监听

watch(() => clazz.value, (newValue, oldValue) => {
    console.log('班级','新值:', newValue, '旧值:', oldValue)
})

2)监听对象本身变化(浅监听,不是监听对象属性)

① 直接监听

watch(student,  (newValue, oldValue) => {
    console.log('学生信息','新值:', newValue, '旧值:', oldValue)
})

② 通过函数监听,通过.value属性

watch(() => student.value,  (newValue, oldValue) => {
    console.log('学生信息','新值:', newValue, '旧值:', oldValue)
})

3)监听对象属性

① 单独监听,在函数中返回 " 对象.value.属性 "

watch(() => student.value.name, (newValue, oldValue) => {
    console.log('学生姓名','新值:', newValue, '旧值:', oldValue)
})

② 通过配置deep为true开启深度监听,监听对象所有属性

watch(
    student,  
    (newValue, oldValue) => {console.log('学生信息','新值:', newValue, '旧值:', oldValue)}, 
    {deep: true}
)

4)联合监听

监听多个属性,monitorData用数组封装多个监听属性,newData与oldData用数组接受多个监听属性的旧值与新值

watch(
        [clazz1 , clazz2], 
        ([newClazz1, newClazz2], [oldClazz1, oldClazz2]) => {}
)

这里用到了 解构语法,用变量接受数组的成员,也可以直接接收整个数组

通过多个函数监听

watch(
    [() => clazz.value ,  () => clazz2.value], 
    ([newClazz1, newClazz2], [oldClazz1, oldClazz2]) => {}
)

总结

        通过以上使用可以发现:

                ①直接传递监听数据,需要传递响应式对象(ref对象)

                ② 使用函数返回监听数据时,需要返回响应式对象内部具体的数据,即返回 .value 属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值