vue3 watch简单介绍

261 阅读2分钟

这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

vue3 watch的和vue2的watch功能上是一样的 但是写法上区别还是挺大的 先看vue2的写法

{
  data: function() {
     return {
       name: '',
     }
  }
  watch: {
    name: function(old,newval) { // 监听
    
    },
    name: { // 深度监听
      deep:true,
      handler: function() {
      
      }
    }
  }
}

vue3的watch写法 watch hook 其实可以传入3个参数,咱们先介绍两个,前两个参数其实传入的是一个回调函数callback,第一个参数需要我们return返回我们需要监听的数据,第两个回调函数是用来监听的并且返回老数据和新数据,可以看下简单的写法

import { ref, 
 reactive,
 watch,
 h} from 'vue' // 解构出hook
 
 
 setup() { // hook 都需要卸载setup函数里
   let count= ref(0)
 
   watch(()=>{     // 第一种监听方式
      return count.value // 返回监听的数据
   },(newvalue,oldvalue)=>{ // 如果数据变化了会触发此函数
       console.log(newvalue)
   })
   // 第两种监听方式
    watch(count,()=>{}) // 只适用于基本数据类型 对象不行
    
 }

可以简单看下代码截图和打印截图

vue5.png 打印的

vue6.png vue3监听对象方式

import { ref, 
 reactive,
 watch,
 h} from 'vue' // 解构出hook
 
 setUp() {
    let rea =reactive({ name: '1' })
    // 监听错误写法
    watch(rea.name,()=>{}) // 会警告
    // 正确写法
    watch(()=>rea.name,(newvalue,oldvalue)=>{})
 }

代码截图

vue6.png log日志

vue7.png

vue3 watch监听多个属性的情况

import { ref, 
 reactive,
 watch,
 h} from 'vue' // 解构出hook
 
 setup() {
   let c =ref("gggggg")
   let a = ref("hhhhhh")
   // 监听a和c
   watch(()=>{ // 监听多个需要加value
      return [ c.value,a.value ]
   },([newc,newa],[oldc,olda])=>{
      
   })
   
 }

代码截图

vue6.png

日志截图

vue7.png

watch和watchEffect有部分相似的地方

watch也可以返回一个停止的句柄函数 stop = watch() 执行stop() 停止监听 watch也有取消副作用函数,简单看下

watch(()=>{},(newvalue,oldvalue,onInvalidate)=>{
 
onInvalidate(()=>{
   console.log('dasda')
})
})

watch第三个参数也是顺序及调试方法也watch一样


watch(()=>{},(newvalue,oldvalue,onInvalidate)=>{
 
onInvalidate(()=>{
   console.log('dasda')
})
},{ // 第三个参数
  flush: "pre"
   onTrack() {},
   onTrigger() {},
})

watch和watchEffect相似的部分就不给大家过多的介绍了和watchEffect一样,大家可以看下面的文章 watchEffect简单介绍3

watchEffect简单介绍2