vue中如何使用watch

Watch(侦听器)

watch用来响应数据的变化,当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

1.使用方法

函数用法
watch: {
    count(newValue, oldValue) {
        console.log('count-newValue:' + newValue)
        console.log('count-oldValue:' + oldValue)
        // todo  需要依据count执行的异步操作或复杂操作
    },
}
对象用法
watch: {
    amount: {
        handler(newValue, oldValue) {
            console.log('amount-newValue:' + newValue?.value, newValue)
            console.log('amount-oldValue:' + oldValue?.value, oldValue)
            // todo  需要依据count执行的异步操作或复杂操作
        },
        immediate: true, // 默认是false,watch在首次绑定amount时,是否立即执行handler函数
        deep: true // 默认是false,在监听对象变化时,一般情况下无法监听对象内部属性的变化。deep属性为true时,可以对对象深度监听
    }
    
    // 也可以直接监听
    'amount.value': {
        handler(newValue, oldValue) {
            console.log('amount-newValue:' + newValue?.value, newValue)
            console.log('amount-oldValue:' + oldValue?.value, oldValue)
            // todo  需要依据count执行的异步操作或复杂操作
        },
        immediate: true,
        deep: false
    }
}
字符串或者数组用法
watch: {
    // ['valueChange', 'valueChange2']
    value: 'valueChange'
},
methods: {
    valueChange(newValue, oldValue) {
        console.log('value-newValue:' + newValue)
        console.log('value-oldValue:' + oldValue)
    },
    valueChange2() {
        console.log('valueChange2-------')
    }
}

2.使用场景

什么样的数据可以被watch监听。

data

vue中data属性中的数据可以被监听

data() {
    return {
        count: 0
    }
},
watch: {
    count(newValue, oldValue) {
        console.log('count-newValue:' + newValue)
        console.log('count-oldValue:' + oldValue)
        // todo  需要依据count执行的异步操作或复杂操作
    },
}
props

vue中props属性中的数据可以被监听,可以监听父组件传过来的值的变化,处理本组件的逻辑。

watch: {
    // props属性
    count(newValue, oldValue) {
        console.log('子组件newVlaue:' + newValue)
        console.log('子组件oldValue:' + oldValue)
    },
},
props: {
    count: {
        type: Number,
        default: 0
    }
},
inject

依赖注入到该组件的数据可以被监听。

watch: {
    // 依赖
    map: {
        handler(newValue, oldValue) {
            console.log('依赖newVlaue:' + newValue)
            console.log('依赖oldValue:' + oldValue)
        },
        immediate: true
    }
},
inject: ['map']
computed

计算属性值的变化可以被监听到。

watch: {
    // computed属性
    countMultiply(newValue, oldValue) {
        console.log('计算属性newVlaue:' + newValue)
        console.log('计算属性oldValue:' + oldValue)
    }
},
computed: {
    countMultiply() {
        return this.count + 100
    }
},

3.视频讲解

视频讲解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3watch函数可以用于监听响应式对象或者多个普通类型的变化。使用watch函数时,需要传入要监听的目标以及回调函数来处理变化。 例如,在监听响应对象时,可以通过reactive函数创建一个响应式对象,然后使用watch函数来监听该对象的变化,并在回调函数处理新值和旧值。代码示例如下: ```javascript const person = reactive({ name: "柳小刀", age: 18, sex: "男" }); watch(person, (newValue, oldValue) => { console.log(newValue, oldValue); }); ``` 而在监听多个普通类型时,可以使用ref函数创建多个ref对象,并将这些对象作为数组传递给watch函数。在回调函数,会返回一个包含新值和旧值的数组。 ```javascript const index = ref(0); const inends = ref(0); watch([index, inends], (newValue, oldValue) => { console.log("新值是", newValue, "旧址是", oldValue); //返回的是一个数组 }); ``` 需要注意的是,在Vue 3watch函数的使用可能会出现一些报错信息。如果遇到问题,可以参考一些有关解决方案的文章和代码示例来解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue3 watch的用法](https://blog.csdn.net/m0_60899441/article/details/126056663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue 使用 watch 出现了如下的报错的原因分析](https://download.csdn.net/download/weixin_38748210/12942109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一一GG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值