vue3中的watch函数

watch函数

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

监听单个数据:

<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>

监听多个数据:

<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:在监听器创建时立即触发回调,响应式数据变化之后继续执行回调

watch(count,() =>{
	console.log('count变化了')
},{
	immediate: true
})

deep

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

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发生变化的时候才会发生回调

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

总结:

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

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

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

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

相关推荐

  1. Vue3watch函数使用

    2024-07-18 08:38:06       56 阅读
  2. vue3watch函数

    2024-07-18 08:38:06       23 阅读
  3. Vue 3 watch 函数:实战指南

    2024-07-18 08:38:06       42 阅读
  4. vue3watch

    2024-07-18 08:38:06       55 阅读
  5. VUE3——watch函数

    2024-07-18 08:38:06       32 阅读
  6. vue3watch详解

    2024-07-18 08:38:06       38 阅读
  7. Vue3.0-watch&&watchEffect函数

    2024-07-18 08:38:06       52 阅读
  8. 第41节: Vue3 watch函数

    2024-07-18 08:38:06       55 阅读
  9. Vue3watch与watchEffect区别

    2024-07-18 08:38:06       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 08:38:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 08:38:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 08:38:06       58 阅读
  4. Python语言-面向对象

    2024-07-18 08:38:06       69 阅读

热门阅读

  1. 力扣题解(目标和)

    2024-07-18 08:38:06       23 阅读
  2. oracle数据字典详解

    2024-07-18 08:38:06       18 阅读
  3. 自定义异常

    2024-07-18 08:38:06       21 阅读
  4. leetcode-46. 全排列

    2024-07-18 08:38:06       24 阅读
  5. 观察者模式-C#

    2024-07-18 08:38:06       26 阅读
  6. 掌握JVM调优:如何在Gradle中配置JVM参数?

    2024-07-18 08:38:06       20 阅读
  7. vue2.0中如何实现数据监听

    2024-07-18 08:38:06       21 阅读