vue3中的watch函数

watch函数

作用:监听数一个或者多个数据的变化,数据变化时执行回调函数,两个额外的参数:1、immediate(立即执行)2、deep(深度监听)

监听单个数据:

javascript 复制代码
<script setup>
import { ref,watch} from 'vue'
const count = ref(0)
const setCount = () => {
  count.value++
}
watch(count,(newVal,oldVal) => {
  console.log('count变化了',newVal,oldVal)
})
</script>
<template>
  <div>
    <button @click="setCount">{{ count }}</button>
  </div>
</template>

监听多个数据:

javascript 复制代码
<script setup>
import { ref,watch} from 'vue'
const count = ref(0)
const changeCount = () => {
  count.value++
}
const name = ref('con')
const changeName = () => {
  name.value = 'pc'
}

watch(
  [count,name],
  (
    [newCount,newName],
    [oldCount,oldName]
  ) => {
    console.log('有值发生变化了',[newCount,newName],
      [oldCount,oldName]
    )
  }
)
</script>

immediate:在监听器创建时立即触发回调,响应式数据变化之后继续执行回调

javascript 复制代码
watch(count,() =>{
	console.log('count变化了')
},{
	immediate: true
})

deep

通过watch监听的ref对象默认是浅层监听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep选项

javascript 复制代码
const state = ref({ count:0 })
watch(state,() => console.log('数据变化了'))
const changeStateByCount = () => {
//直接1修改属性 -> 不会触发回调
state.value.count++
}

//深度监听
watch(state,() => {
    console.log('count变化了')
},{
    deep: true
})

deep开启之后,对象中的任意一个属性发生了变化以后都会触发回调

精确监听对象的某个属性:

在不开启deep的前提下,监听age的变化,只有age发生变化的时候才会发生回调

javascript 复制代码
const info = ref({
	name: 'cp',
	age: 18
})
watch(
//监听具体某一属性
	() => info.value.age,
	() =>console.log('age发生变化了')
)

总结:

1、作为watch函数的第一个参数,ref对象不需要添加.value

2、watch可以监听多个数据,使用数组封装

3、不开启deep,直接修改嵌套属性不会触发回调

4、不开启deep,想在某个层次比较深的属性变化时执行回调:可以把第一个参数写成函数的写法,这次要监听具体的属性

相关推荐
前端李二牛5 分钟前
现代CSS属性兼容性问题及解决方案
前端·css
星光不问赶路人8 分钟前
TypeScript 模块扩展
vue.js·typescript
贰月不是腻月21 分钟前
凭什么说我是邪修?
前端
中等生23 分钟前
一文搞懂 JavaScript 原型和原型链
前端·javascript
前端李二牛24 分钟前
现代化图片组件设计思路与实现方案
前端·html
黑椒牛肉焖饭25 分钟前
web第一次作业
前端·javascript·html
一枚前端小能手42 分钟前
Vue3 开发中的5个实用小技巧
前端
Sawtone43 分钟前
shadcn/ui:我到底是不是组件库啊😭图文 + 多个场景案例详解 shadcn + tailwind 颠覆性组件开发,小伙伴直呼高端
前端·面试
柏成43 分钟前
qiankun 微前端框架🐳
前端·javascript·vue.js
Sherry0071 小时前
终极指南:彻底搞懂 React 的 useMemo 和 useCallback!(译)
前端·react.js