vue3监视对象,以及对watch的3个参数解析

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

let myInfo = reactive({
  name: 'white',
  age: 18,
  sex: '男'
})

watch(
  () => ({ ...myInfo }),
  (newVal, oldVal) => {
    console.log('新=', newVal)
    console.log('旧=', oldVal)
  },
  { deep: true }
)

由于 Vue 的 watch 函数在监听对象时,会对对象的引用进行比较,

如果引用相同,即使对象的属性值发生了变化,也不会触发回调函数,

因此,为了绕过这个限制,我们需要返回一个新的对象来实现监听对象属性的变化。


这段代码使用了 Vue 的 watch 函数来监听数据源 myInfo 的变化。watch 函数会观察 myInfo 的值,并在其发生改变时执行相应的回调函数。

在第一个参数中,
复制代码
传入了一个箭头函数,它返回了 myInfo 对象的所有属性,

这样做是为了创建一个新的对象,以便在 watch 函数中观察其变化,

这样做是为了确保 watch 函数能够检测到 myInfo 对象的属性的变化,而不仅仅是 myInfo 对象本身的变化
在第二个参数中,
复制代码
定义了一个回调函数,它会在 myInfo 的值发生变化时被触发,

这个回调函数接收两个参数:newVal 和 oldVal,

newVal:新的数据源的值,即箭头函数返回的对象,

oldVal:旧的数据源的值,即在回调函数被触发前的 myInfo 的值
第三个参数是一个选项对象,
复制代码
{ deep: true }:表示要深度观察对象的变化,

如果 myInfo 对象的属性是对象或数组,它们的内部变化也会被观察到,

如果不提供这个配置项,watch 函数默认只观察对象的引用变化,而不会深入观察对象内部的变化
相关推荐
kakacc:4 小时前
SpringBoot+Hutool+Vue实现导出
java·vue.js·spring boot
徐小夕7 小时前
花了4个月时间,我写了一款支持AI的协同Word文档编辑器
前端·vue.js·后端
paopaokaka_luck8 小时前
基于SpringBoot+Vue的少儿编程培训机构管理系(WebSocket及时通讯、协同过滤算法、Echarts图形化分析)
java·vue.js·spring boot·后端·spring
Gazer_S10 小时前
【前端状态管理技术解析:Redux 与 Vue 生态对比】
前端·javascript·vue.js
小光学长10 小时前
基于Vue的图书馆座位预约系统6emrqhc8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
Y学院10 小时前
vue的组件通信
前端·javascript·vue.js
Greg_Zhong10 小时前
vue项目安装使用,npm、webpack版本问题注意
vue.js·npm版本、webpack版本
岁月宁静11 小时前
AI聊天系统 实战:打造优雅的聊天记录复制与批量下载功能
前端·vue.js·人工智能
加洛斯12 小时前
Vue 知识篇(2):浅谈Vue中的DOM与VNode
前端·javascript·vue.js
Never_Satisfied13 小时前
在JavaScript中,map方法使用指南
前端·javascript·vue.js