当前位置: 首页 > news >正文

Vue3中watch监视ref对象方法详解

在 Vue3 中,使用 watch 监视 ref 定义的对象类型时,可以通过以下两种方式实现:

方法一:直接监视 ref 对象并启用深度监听

javascript

import { ref, watch } from 'vue';

const obj = ref({ a: 1 });

// 监视 ref 对象,设置 { deep: true } 以监听嵌套属性变化
watch(obj, (newVal, oldVal) => {
  console.log('对象变化:', newVal);
}, { deep: true });

// 触发方式:
obj.value.a = 2;      // 触发回调(需设置 deep: true)
obj.value = { a: 3 }; // 触发回调

方法二:通过 Getter 函数监视 ref.value(推荐)

javascript

import { ref, watch } from 'vue';

const obj = ref({ a: 1 });

// 监视 ref.value(即 reactive 对象),默认启用深度监听
watch(() => obj.value, (newVal, oldVal) => {
  console.log('对象变化:', newVal);
});

// 触发方式:
obj.value.a = 4;      // 触发回调(无需 deep)
obj.value = { a: 5 }; // 触发回调

区别与选择

  1. 方法一 直接监视 ref 对象:

    • 需要显式设置 { deep: true } 才能监听对象内部属性的变化。

    • 适合需要显式控制深度监听的场景。

  2. 方法二 通过 Getter 监视 ref.value

    • 自动启用深度监听,因为 ref.value 返回的是 reactive 对象。

    • 更简洁,无需额外配置,推荐使用。

总结

  • 修改对象属性:两种方法均可触发回调,但方法二无需 deep

  • 替换整个对象:两种方法均会触发。

  • 推荐使用方案二,代码更简洁且符合 Vue3 响应式设计。

http://www.dtcms.com/a/122070.html

相关文章:

  • win10开机启动文件夹所在位置
  • MQTT-Dashboard-数据集成
  • JS 箭头函数
  • 深度了解向量引论
  • 【Linux】——文件(下)
  • 基础环境配置
  • 使用Python的Schedule库实现定时任务,并传递参数给任务函数
  • 【教学类-102-06】蛋糕剪纸图案(留白边、沿线剪)05——Python制作1图2图6图
  • linux kernel arch 目录介绍
  • 函数作为参数传递
  • 人力外包解决方案:重构企业用人成本的最优配置
  • VUE中的pinia
  • 使用切面的权限注解,可以重复修饰同一个接口
  • vue3腾讯云直播 前端拉流(前端页面展示直播)
  • Green-AI-Resources开源程序是用于环境可持续 AI 开发和部署的精选研究、工具和最佳实践集合
  • centos-LLM-生物信息-BioGPT安装
  • RecyclerView 和 ListView从 设计理念、性能优化 和 扩展能力 三个维度展开分析
  • 基于开源 AI 大模型 AI 智能名片 S2B2C 商城小程序的京城首家无人智慧书店创新模式研究
  • 编码常见的 3类 23种设计模式——学习笔记
  • python处理excel文件
  • 127.0.0.1本地环回地址(Loopback Address)
  • LeetCode 相交链表题解:双指针的精妙应用
  • 我的NISP二级之路-04
  • 系统分析师(二)--操作系统
  • CD24.【C++ Dev】类和对象(15)初始化列表(下)和对象隐式类型转换
  • 深入理解Spring是如何解决循环依赖的
  • [250409] GitHub Copilot 全面升级,推出AI代理模式,可支援MCP | Devin 2.0 发布
  • 数据库管理工具实战:IDEA 与 DBeaver 连接 TDengine(一)
  • Vue2-实现elementUI的select全选功能
  • 卷积神经网络(CNN)基础