【vue3】watch监听器

主要结构


import {ref, reactive,watch} from 'vue'
watch([监听值1,监听2,...],(newVal,oldVal)=>{
	...
},{
	    deep:true,  //ref需要手动开启,reactive则不用主动开启 源码中是默认开启的
        immediate:true, //默认一进来就开启执行一次
        flush:'pre' //pre-组件更新之前调用  sync-同步执行   post-组件更新之后执行 

具体写法


<template>
        <div>
            case1:<input v-model="name"/>
        </div>
        <div>
            case2:<input v-model="name2"/>
        </div>
        <div>
            深度监听:<input v-model="deep.child.inner.num"/><br>
            深度监听单个属性:<input v-model="deep2.child.name"/>
        </div>
        
</template>
    
<script setup lang='ts'>
    import {ref, reactive,watch} from 'vue'

    let name = ref<string>('youyunxia')
    let name2 = ref<string>('张三')

    /**
     * 监听name
     * 监听多个数据源要传数组[]
     * watch([p1,p2,...],(newVal,oldVal)=>{})
     */
    watch(name,(newVal,oldVal)=>{
        console.log(newVal,oldVal)
    })
    watch([name,name2],(newVal,oldVal)=>{
        console.log(newVal,oldVal)
    })

    /**
     * 开启深度监听
     * reactive不需要开启deep:true
     * ref需要开启deep:true,但是返回的新值和旧值是一样的
     * 多层嵌套的情况最好使用reactive
     */
    let deep = reactive({
        name:'youyunxia',
        child:{
            name:'child',
            inner:{
                num:3
            }
        }
    })
    watch(deep,(newVal,oldVal)=>{
        console.log(newVal,oldVal)
    },{
        deep:true,  //ref需要手动开启,reactive则不用主动开启 源码中是默认开启的
        immediate:true, //默认一进来就开启执行一次
        flush:'pre' //pre-组件更新之前调用  sync-同步执行   post-组件更新之后执行 
    })

    /**
     * 监听内部单个属性
     * 只有使用reactive的时候,才可以监听到内部的单个属性
     * 第一个参数格式为proxy对象,直接.写属性不对,官方推荐用一个箭头函数的形式转一下
     * 例:()=> deep2.child.name
     */
    let deep2 = reactive({
        child:{
            name:'child',
            inner:{
                num:3
            }
        }
    })
    watch( ()=> deep2.child.name,(newVal,oldValue)=>{
        console.log(newVal,oldValue)
    })
    
</script>
    
<style>
    
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值