首页 > 其他分享 >vue3中watch监听ref reactive响应式数据写法及注意点

vue3中watch监听ref reactive响应式数据写法及注意点

时间:2022-09-22 11:24:47浏览次数:54  
标签:oldv true vue3 watch reactive 监视 newv

watch函数

  • 与vue2中watch配置一致
  • 两个小坑
    • 监视reactive定义的响应式数据时,oldvalue无法正确获取,强制开启了深度监视(deep配置失败)
    • 监视reactive定义的响应式数据中某个属性时:deep配置有效
    let sum = ref(10);
    let user = ref('zs');
    let person = reactive({
     name:'ht',
     age:19.
     job:{
      j1:{
       salary:10
      }
     }
    })
    let person1 = ref({
     name:'ht',
     age:19.
     job:{
      j1:{
       salary:10
      }
     }
    })
    
    情况一:监视ref的一个响应式数据
    watch(sum,(newValue,oldValue)=>{
     console.log('sum发生改变了',newValue,oldValue)
    },{immediate:true})
    
    情况二:监视ref的多个响应式数据,以数组的形式监听
     watch([sum,user],(newValue,oldValue)=>{
     console.log('sum或user发生改变了',newValue,oldValue)
    },{immediate:true})
    
    情况三:监视reactive定义的响应式数据
     //若watch监视的是reactive定义的响应式数据,则无法正确获得oldValue
     //若watch监视的时reactive定义的响应式数据,则强制开启了深度监视,深度监视不生效*/
     watch(person,(newv,oldv)=>{
      console.log('person值发生了变化',newv,oldv)
     },{immediate:true;deep:true})
    
    情况四:监视reactive的某一个属性
     watch(()=>person.age,(newv,oldv)=>{
      consle.log('age发生了变化',newv.oldv)
     },{immediate:true;deep:true})
    
    情况五:监视reactive多个属性
     watch([()=>person.name,()=>person.age],(newv,oldv)=>{
      console.log('name或age变化了',neldv)
     },{immediate:true;deep:true})
    
    情况六:特殊情况 reactive监视对象的某个属性,该属性多层嵌套,必须开启深度监视
    watch(()=>person.job,(newv,oldv)=>{
     console.log('job发生改变',newv,oldv)
    },{deep:true})
    
    当监视ref定义的对象式响应数据类型
    //当监视ref定义的对象式响应数据类型(1)
     watch(person1.value,(newv,oldv)=>{
      console.log('person1发生了变化',newv,oldv)
     })
     //当监视ref定义的对象式响应数据类型(2),舍弃1,person.value监视的是RefImpl对象
     watch(person1,(newv,oldv)=>{
      console.log('person1发生了变化',newv,oldv)
     },{deep:true})
    

标签:oldv,true,vue3,watch,reactive,监视,newv
From: https://www.cnblogs.com/hutongtree/p/16718544.html

相关文章

  • vue3 基础-动态组件 & 异步组件
    之前学习的都是父子组件传值的话题,一句话总结就是,常规数据通过属性传,dom结构通过插槽slot来传.而本篇则关注如何通过数据去控制组件的显示问题,如咱经常用到的......
  • Vue3 Echarts 省地图
    一、效果 二、echarts的安装npminstallecharts三、echarts各省份地图js导入以下是别人下载好的各省份的数据,可以直接下载使用,放在项目js文件夹下,在页面内引入。......
  • vue3源码学习11-编译two-AST内部转换
    在编译one中,template经过解析最终返回了一个AST节点对象,它是对模板的完整描述,但是还是不能用于生成代码,因为语义化还不够,没有包含编译优化相关的属性,vue内部还进行了进一步......
  • 【Vue项目实践】套用github 上的项目运行 electron + vite + vue3
    最终版gitclonehttps://gitee.com/mywink/vite-electron.gityarnyarnbuildyarndev从github上下载这个项目,运行,就得到了electron桌面版的项目,采用vue3来......
  • 2022年vue3 10大开源后台管理系统模板
    当你写项目的时候,如何快速的完成一个项目的搭建,这个时候就需要借助到一些模板了,前端开发的一个好处就是,各类UI模板都是相当的齐全的,直接拿来用就可以了,脱离了一行又一行垒......
  • 【Vue项目实践】创建一个 electron+vue3 的项目
    采用vite来创建一个vue项目,然后在项目中加入electron的配置参考链接:Vite+Electron快速构建一个VUE3桌面应用(一)创建项目1.安装viteyarncreatevite2.创......
  • Vue3:Teleport
    TeleportVue鼓励我们通过将UI和相关行为封装到组件中来构建UI。我们可以将它们嵌套在另一个内部,以构建一个组成应用程序UI的树。然而,有时组件模板的一部分逻辑上属......
  • Vue3:状态驱动的动态 CSS
     状态驱动的动态CSS单文件组件的<style>标签可以通过v-bind这一CSS函数将CSS的值关联到动态的组件状态上 <template><divclass="box1">hello</div>......
  • Vue3:注册组件
    注册组件组件内部<script>importBox1from"./Box1.vue"exportdefult{components:{Box1},setup(){}}</scr......
  • Vue3:Suspense
    等待异步组件时渲染一些额外的内容,让应用有更好的用户体验<suspense>组件有两个插槽。它们都只接收一个直接子节点。default插槽里的节点会尽可能展示出来。如果不能,则......