首页 > 其他分享 >【Vue3】watch 监听器的使用

【Vue3】watch 监听器的使用

时间:2022-10-30 22:14:06浏览次数:50  
标签:console 监听器 watch deep person oldValue Vue3 newValue

watch 的三个参数

  1. watch第一个参数,监听源

  2. watch第二个参数,回调函数cb(newVal,oldVal)

  3. watch第三个参数,一个options配置项是一个对象

    {
    
        immediate:true //是否立即调用一次
        
        deep:true //是否开启深度监听
    
    }
    

那么现在有一组响应式源对象,该如何监听呢。

    // 响应式源对象
    let sum = ref(0)
    let msg = ref('你好')
    let person =reactive({
      name:'张三',
      age:18,
      job:{
        j1:{
          salary:20
        }
      }
    })

情况1:监视ref定义的一个响应式数据

    watch(sum,(newValue,oldValue)=>{
      console.log('sum的值变化了',newValue,oldValue);
    },{immediate:true})

情况2:监视ref定义的多个响应式数据

    //    合并写以数组形式监听
    watch([sum,msg],(newValue,oldValue)=>{
      console.log('sum或msg的值变化了',newValue,oldValue);
    },{immediate:true})

情况3:监视reactive定义的一个响应式数据的全部属性

    /*
          1.注意:此处无法正确的获取oldValue
          1.注意:强制开启了深度监视(deep配置无效)
    */
    watch(person,(newValue,oldValue)=>{
      console.log('person变化了',newValue,oldValue);
    },{deep:false}) // 此处的deep无效

情况4:监视reactive定义的一个响应式数据的某一个属性

    watch( ()=>person.age ,(newValue,oldValue)=>{
      console.log('person年龄变化了',newValue,oldValue);
    })

情况5:监视reactive定义的一个响应式数据的某些属性

    watch( [()=>person.age,()=>person.name] ,(newValue,oldValue)=>{
      console.log('person年龄或姓名变化了',newValue,oldValue);
    })

特殊情况

    watch( ()=>person.job ,(newValue,oldValue)=>{
      console.log('person的job变化了',newValue,oldValue);
    },{deep:true}) //此处由于监视的是reactive所定义的对象中的某个,所以deep配置有效

标签:console,监听器,watch,deep,person,oldValue,Vue3,newValue
From: https://www.cnblogs.com/wanglei1900/p/16842407.html

相关文章

  • 第121期:一次成功的基于vue3和ts的CodeReview
    封面图CodeReview现场背景当前项目已经接入了公司自研的前端监控平台,已经有能力对线上运行的各个项目进行错误监控,并且可以统计相关报错信息及日志。对于报错问题的修复前段......
  • vue3 reactive函数
    reactive的用法与的用法相似,也是将数据变成响应式数据,当数据发生变化时也会自动更新。不同的是用于基本数据类型,而是用于复杂数据类型,比如对象和数组例如:定义一个对象类型......
  • vue3路由的使用
    一、路由的概要1.1、什么是路由?路由就是一组映射关系,根据不同的url地址展示不同的内容或页面(key-value);key为路径,value可能是function或component 路......
  • Vue3中 响应式 API ( readonly、shallowReadonly、toRaw、markRaw ) 详解
    ​​传送门:Vue3中响应式API(reactive、ref、toRef、toRefs)详解​​传送门:Vue3中响应式API(shallowReactive、shallowRef、triggerRef、customRef)详解1.readonly......
  • 【转】Vue Watch 侦听器
    npmiaxios-S         ......
  • #yyds干货盘点#Vue3.2 新指令 v-memo解析
    v-memo官方定义缓存一个模板的子树。在元素和组件上都可以使用。为了实现缓存,该指令需要传入一个固定长度的依赖值数组进行比较。如果数组里的每个值都与最后一次的渲染相......
  • 【Echarts】Vue3 + TS 封装一个建议的Echarts组件
    <template><divref="myChartsRef":class="className":style="{height:height,width:width}":option="option"></div></template><scriptsetuplang='ts'>......
  • 【Vue3】ref, reactive, shallowRef, shallowReactive, toRaw, markRaw, readonly, sh
    ref的实现ref实现响应式(基本类型)也是采用Object.definedProperty()来实现的getter和setterref实现响应式(对象类型)也是采用Proxy来实现(底层调用reactive方法)reac......
  • Vue3——Transition TransitionGroup
    Vue3TransitionTransitionGroup官网地址:https://cn.vuejs.org/guide/built-ins/transition.html官网讲得很详细我就只写基本用法了目录Vue3TransitionTransitionGr......
  • Vue3——自定义组件-插件
    Vue3自定义指令插件官网链接:https://cn.vuejs.org/guide/reusability/custom-directives.html#introduce1.自定义指令:1.1自定义指令声明局部声明:constfocus={......