Vue3实战笔记(61)—Vue 3 Watch进化论:解锁实时数据监听新境界

文章目录


前言

Vue 3 中的 watch 功能相比Vue 2有了改进和扩展,旨在提供更灵活的数据监听方式。


基本使用

Vue 3中的watch可以用于Composition API和Options API,但Composition API的使用更为常见。它主要用于监听响应式数据的变化,并在数据变化时执行特定的逻辑。

Composition API中的使用

javascript 复制代码
import { ref, watch } from 'vue'

const count = ref(0)

watch(count, (newValue, oldValue) => {
  console.log(`count changed from ${oldValue} to ${newValue}`)
})

在这个例子中,watch监听count的任何变化,并在变化时打印出新旧值。

多个数据源

你也可以同时监听多个数据源的变化:

javascript 复制代码
const count = ref(0)
const name = ref('')

watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
  console.log(`count: ${oldCount} -> ${newCount}, name: ${oldName} -> ${newName}`)
})

配置选项

watch接受第三个参数,用于配置监听行为,如:

immediate: 设置为true时,会在初始渲染时立即触发回调函数。

deep: 如果监听的对象或数组内部发生了变化,设置为true会触发回调。默认为false,只监听引用的变化。

javascript 复制代码
watch(count, (newValue, oldValue) => {
  // 逻辑处理
}, {
  immediate: true,
  deep: true
})

使用Ref和Reactive

对于ref定义的响应式数据,直接传递给watch即可。

对于reactive定义的对象,你可以直接传入整个对象,或使用解构语法监听特定属性。

watchEffect

Vue 3还引入了watchEffect,它会自动收集依赖并运行副作用函数,每当依赖发生变化时,都会重新运行。与watch不同,watchEffect不需要明确指定依赖,更适合依赖数据较多且难以枚举的场景。

javascript 复制代码
import { watchEffect } from 'vue'

watchEffect(() => {
  // 这里的逻辑会自动监听所有被访问的响应式数据
  console.log(count.value, name.value)
})

总结

Vue 3的watch提供了一种强大的方式来监听数据变化,支持更细致的控制和更高效的逻辑处理。通过结合watchEffect,开发者可以根据具体需求灵活选择最适合的监听方式,从而提升应用的响应性和用户体验。

蹉跎只能感动自己,行动才能打动别人。

相关推荐
qq_2842740518 分钟前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274051 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
雪芽蓝域zzs2 小时前
第 5 节:Marker 点击弹出 InfoWindow 信息窗口
vue.js
Titan20242 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
深圳老胡4 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
小宋10214 小时前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
坤坤子吖4 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
大包子4 小时前
structuredClone vs lodash.cloneDeep:核心差异与选型指南
javascript·vue.js
乐橙开放平台4 小时前
智慧连锁客流检测和离岗检测怎么对接
大数据·人工智能·笔记·物联网·自动化·音视频·智能家居
零基础1234 小时前
FinalShell 使用教程:从安装到高效运维
运维·经验分享·笔记·finalshell