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

深度监听 ref 和 reactive 的区别详解

深度监听 ref 和 reactive 的区别详解

    • 一、ref 的深度监听(示例代码)
      • 关键点:
        • 1. ref 的存储方式:
        • 2. 监听 ref 的特性
    • 二、reactive 的深度监听(示例代码)
      • 关键点:
        • 1. reactive 的深度响应性
        • 2. 监听 reactive 的特性
    • 三、核心区别总结
    • 四、最佳实践建议
      • 1. 优先使用 reactive
      • 2. 明确 ref 的使用场景
      • 3. 简化 watch 配置


以下从响应式原理、监听方式和实际表现三个维度,分析二者的核心区别:

一、ref 的深度监听(示例代码)

<template><div class="person"><p>嵌套值:{{ refObj.nested.value }}</p><button @click="refObj.nested.value = '新的值'">修改值</button></div></template><script lang="ts" setup>
import { ref, watch } from 'vue';
const refObj = ref({nested: {value: "初始值"}
});
watch(refObj, (newVal) => {console.log("ref 嵌套变化:", newVal.nested.value);
}, { deep: true }); // 必须显式设置 deep: truewatch(refObj.value, (newVal) => {console.log("ref 嵌套变化:", newVal.nested.value);
}); // 若改为监听refObj.value(即 reactive 对象),则无需 deep</script>

关键点:

1. ref 的存储方式:

ref 会将对象包裹在 .value 属性中,底层自动用 reactive 转换嵌套对象。(即 refObj.value 是 reactive 代理对象)

2. 监听 ref 的特性
  • 直接监听 refObj(而非 .value)时,需要显式设置 deep: true 才能捕获嵌套属性变化。若不设置 deep,仅当整个 .value 被替换时才会触发监听。
  • 等价替代方案
    若改为监听 refObj.value(即 reactive 对象),则无需 deep:

二、reactive 的深度监听(示例代码)

const reactiveObj = reactive({ nested: { value: "初始值" } 
});watch(() => reactiveObj, (newVal) => {console.log("reactive 嵌套变化:", newVal.nested.value);
}, { deep: true }); // deep:true 在此处是冗余的

关键点:

1. reactive 的深度响应性

reactive 创建的代理对象默认支持深层级响应,修改任意嵌套属性都会触发更新。

2. 监听 reactive 的特性
  • 直接监听 reactiveObj 时,无需 deep 即可自动深度监听。
    示例代码中的 () => reactiveObj 是冗余写法,直接传递 reactiveObj 即可:
watch(reactiveObj, (newVal) => {console.log("reactiveObj 嵌套变化:", newVal.nested.value);
}); // 直接监听 reactiveObj 时,无需 deep 即可自动深度监听
  • 若监听一个返回 reactive 对象的函数(如 () => reactiveObj),需开启深度监听:{deep:true}
watch(()=>reactiveObj, (newVal) => {console.log("reactiveObj 嵌套变化:", newVal.nested.value);
},{deep:true}); // 监听一个返回reactive对象的函数,deep:true 开启深度监听
  • 若监听 reactiveObj.nested.value 时,需使用函数式写法()=>reactiveObj.nested.value,无需开启深度监听。
watch(()=>reactiveObj.nested.value,(newVal,oldVal)=>{console.log("reactiveObj 嵌套变化:", newVal,oldVal);
}); // 监听 reactiveObj.nested.value 时,需使用函数式写法,deep 选项无效

三、核心区别总结

特性ref (对象类型)reactive
数据存储方式包裹在 .value 中直接代理对象
默认深度监听否(需显式设置 deep)
推荐监听方式监听 .value (无需 deep)直接监听对象
适用场景基本类型或需要替换整个对象复杂对象,需深层级响应式

四、最佳实践建议

1. 优先使用 reactive

处理复杂对象时,reactive 的自动深度响应更简洁高效。

2. 明确 ref 的使用场景

当需要替换整个对象或处理基础类型时,选择 ref。

3. 简化 watch 配置

  • 监听 ref 的 .value 替代显式 deep
  • 直接传递 reactive 对象而非函数返回值

通过理解这些差异,可以更精准地选择响应式工具,并避免不必要的性能消耗。

相关文章:

深度监听 ref 和 reactive 的区别详解

深度监听 ref 和 reactive 的区别详解 一、ref 的深度监听&#xff08;示例代码&#xff09;关键点&#xff1a;1. ref 的存储方式&#xff1a;2. 监听 ref 的特性 二、reactive 的深度监听&#xff08;示例代码&#xff09;关键点&#xff1a;1. reactive 的深度响应性2. 监听…...

面向对象—有理数类的设计

目录 1.代码呈现 1.1编写toString、equals方法 1.2测试代码 1.3有理数类的代码 2.论述题 3.有理类设计 1.代码呈现 1.1编写toString、equals方法 (1)toString方法 Overridepublic String toString(){if(this.v20){return "Undefined";}return this.v1 "/…...

OpenHarmony Camera开发指导(四):相机会话管理(ArkTS)

概述 相机在使用预览、拍照、录像、获取元数据等功能前&#xff0c;都需要先创建相机会话。 相机会话Session的功能如下&#xff1a; 配置相机的输入流和输出流。 配置输入流即添加设备输入&#xff0c;通俗来讲即选择某一个摄像头进行拍照录像&#xff1b;配置输出流&#x…...

Linux电源管理(三),CPUIdle 和 ARM的PSCI

更多linux系统电源管理相关的内容请看&#xff1a;Linux电源管理、功耗管理 和 发热管理 (CPUFreq、CPUIdle、RPM、thermal、睡眠 和 唤醒)-CSDN博客 1 简介 Linux下的空闲进程cpuidle在内核中是一个子系统。cpuidle子系统所需要做的事情就是在CPU进入idle状态后&#xff0c;…...

【测试工具】JMeter使用小记

JMeter 使用小记 下载与安装 jdk 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jdk18-windowsJMeter 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 教程参考&#xff1a;JMeter下载及安装详细教程-CSDN博客 设置中文界…...

Obsidian的简单使用

一、安装并配置仓耳今楷字体 优化阅读体验&#xff0c;个人实测觉得正文用 仓耳今楷04-W03最合适&#xff08;前面的数字代表字体&#xff0c;数字越大&#xff0c;越偏向于楷体&#xff0c;而01就很像黑体。后面的数字代表粗细&#xff0c;正常粗细是W03&#xff0c;最粗是W0…...

docker的基础知识

Docker https://www.yuque.com/leifengyang/sutong 下载镜像 检索&#xff1a; docker search下载: docker pull列表: docker images删除 docker rmi启动容器 运行&#xff1a; docker run查看&#xff1a; docker ps停止&#xff1a; docker stop启动&#xff1a; …...

PcVue助力立讯:精密制造的智能化管控实践!

PcVue助力立讯&#xff1a; 精密制造的智能化管控实践&#xff01; 客户介绍 立讯精密&#xff08;Luxshare ICT&#xff0c;股票代码&#xff1a;002475&#xff09;成立于2004年5月24日&#xff0c;专注于为消费电子产品、汽车领域产品以及企业通讯产品提供从核心零部件、…...

深度学习-157-Dify工具之创建知识库

文章目录 1 硅基流动1.1 模型广场1.1.1 对话模型(免费)1.1.2 嵌入模型(免费)1.1.3 重排序模型(免费)1.2 模型调用1.2.1 文本对话1.2.2 文本嵌入2 构建知识库2.1 准备文档2.2 点击创建知识库2.3 设置嵌入参数2.4 召回测试3 创建聊天助手3.1 仅使用大模型3.2 结合知识库的大模型3…...

Oracle--安装Oracle Database23ai Free

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 官方文档&#xff1a; Get Started with Oracle Database 23ai | Oracle 一、安装的环境要求 本文同步使用Oracle Linux9的虚拟机进行操作 1、Orac…...

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(三)

本篇博客给大家带来的是集合类在多线程下的使用和死锁的知识点还包括常见的面试题. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&…...

【verilog】多个 if 控制同一个变量(后面会覆盖前面)非阻塞赋值真的并行吗?

非阻塞赋值 (<) 是“并行”的&#xff0c;但是代码顺序会影响结果&#xff1f;”这正是 Verilog 的硬件描述本质 vs 行为语义之间的微妙之处。 &#x1f4a1;1. 非阻塞赋值真的并行吗&#xff1f; 是的&#xff01;非阻塞赋值 < 从行为上是并行的&#xff0c;也就是说&a…...

C++事件驱动编程从入门到实战:深入理解与高效应用

C事件驱动编程从入门到实战&#xff1a;深入理解与高效应用 在现代软件开发中&#xff0c;事件驱动编程&#xff08;Event-Driven Programming&#xff09;作为一种流行的编程范式&#xff0c;被广泛应用于图形用户界面&#xff08;GUI&#xff09;、网络通信、游戏开发等众多…...

问题 | MATLAB比Python更有优势的特定领域

以下是关于MATLAB在特定领域相较于Python的优势的详细分析&#xff0c;结合其核心功能、行业应用及技术特性展开论述&#xff1a; 一、科学研究与工程计算 1. 数值计算的高效性 MATLAB的核心设计围绕矩阵运算展开&#xff0c;其底层对线性代数和数值计算进行了深度优化。例如…...

黑马商城项目(三)微服务

一、单体架构 测试高并发软件 二、微服务 三、SpringCloud 四、微服务拆分 黑马商城模块&#xff1a; 服务拆分原则&#xff1a; 拆分服务&#xff1a; 独立project&#xff1a; maven聚合&#xff1a; 拆分案例&#xff1a; 远程调用&#xff1a; package com.hmall.cart.…...

Qt界面卡住变慢的解决方法

本质原因: 当Qt界面出现卡顿或无响应时&#xff0c;通常是因为主线程&#xff08;GUI线程&#xff09;被耗时操作阻塞。 完全忘了。。。 Qt Creater解决方法 1. 定位耗时操作 目标&#xff1a;找到阻塞主线程的代码段。 方法&#xff1a; 使用QElapsedTimer测量代码执行时间…...

Flutter的原理及美团的实践(下)

Flutter的原理及性能实践 Flutter和原生性能对比 虽然使用原生实现&#xff08;左&#xff09;和Flutter实现&#xff08;右&#xff09;的全品类页面在实际使用过程中几乎分辨不出来&#xff1a; 但是我们还需要在性能方面有一个比较明确的数据对比。 我们最关心的两个页面…...

时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测

时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测 目录 时序预测 | Matlab实现基于VMD-WOA-ELM和VMD-ELM变分模态分解结合鲸鱼算法优化极限学习机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab…...

【云安全】云原生- K8S IngressNightmare CVE-2025-1974(漏洞复现完整教程)

漏洞原理 CVE-2025-1974: The IngressNightmare in Kubernetes | Wiz Blog 分两方面&#xff1a; a、配置注入过程 构造一个恶意的Ingress资源&#xff0c;其中注入ssl_engine指令指向恶意共享库向准入控制器验证端点&#xff08;AdmissionWebhook&#xff09;发送Admissio…...

Tomcat与Servlet(2)

上篇文章&#xff1a; Tomcat与Servlethttps://blog.csdn.net/sniper_fandc/article/details/147278469?fromshareblogdetail&sharetypeblogdetail&sharerId147278469&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇文章介绍了To…...

在高数据速度下确保信号完整性的 10 个关键策略

随着越来越多的传感器连接到系统&#xff0c;需要快速、可靠和安全地传输更多数据&#xff0c;对带宽和设计复杂性的需求也在增加。优先考虑的是确保从 A 发送到 B 的信号不会失真。 确保信号完整性 对于设计依赖于持续准确数据流的数据密集型应用程序的工程师来说&#xff0c…...

2025华中杯数学建模B题完整分析论文(共42页)(含模型、数据、可运行代码)

2025华中杯大学生数学建模B题完整分析论文 目录 一、问题重述 二、问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1解析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;仅供参考&#xff09; 4.1.4问题1求解结果&#xff08;仅供参考&am…...

UE5 自带的视频播放器

文章目录 文件夹准备添加一个文件媒体源方法1方法2 添加一个视频播放器播放视频直接播放使用网格体播放使用UI播放 播放视频的音乐媒体播放器常用的节点设置循环是用绝对路径播放视频&#xff0c;视频无需导入注册播放完成事件 文件夹准备 视频必须被放在Content/Moveis文件下…...

是德科技E5080B网络分析仪深度评测:5G/车载雷达测试实战指南

是德科技E5080B网络分析仪&#xff08;ENA系列&#xff09;是一款高性能射频测试仪器&#xff0c;广泛应用于通信、航空航天、半导体等领域&#xff0c;以下是其核心功能详解&#xff1a; 一、核心测试功能 多参数网络分析 S参数测量&#xff1a;支持全双端口S参数测试&#xf…...

javaSE————网络编程套接字

网络编程套接字~~~~~ 好久没更新啦&#xff0c;蓝桥杯爆掉了&#xff0c;从今天开始爆更嗷&#xff1b; 1&#xff0c;网络编程基础 为啥要有网络编程呢&#xff0c;我们进行网络通信就是为了获取丰富的网络资源&#xff0c;说实话真的很神奇&#xff0c;想想我们躺在床上&a…...

力扣349 == 两个数组交集的两种解法

目录 解法一&#xff1a;利用 Set 特性高效去重 解法二&#xff1a;双重遍历与 Set 去重 方法对比与总结 关键点总结 题目描述 给定两个整数数组 nums1 和 nums2&#xff0c;要求返回它们的交集。输出结果中的每个元素必须是唯一的&#xff0c;且顺序不限。 示例 输入&…...

笔试专题(十)

文章目录 对称之美&#xff08;双指针&#xff09;题解代码 连续子数组最大和&#xff08;线性dp&#xff09;题解代码 最长回文子序列&#xff08;区间dp&#xff09;题解代码 对称之美&#xff08;双指针&#xff09; 题目链接 题解 1. 双指针 2. 用left标记左边的字符串…...

YOLOv12即插即用---RFAConv

1.模块介绍 接受域注意卷积(RFAConv):更聪明地感知空间特征 在传统卷积神经网络中,卷积核参数的共享机制虽有效提升了模型的泛化能力与计算效率,但却忽略了不同空间位置特征在感知范围(即接受域)内的重要性差异。为此,我们提出了一种更具感知能力的模块 —— 接受域注…...

使用datax通过HbaseShell封装writer和reader同步hbase数据到hbase_踩坑_细节总结---大数据之DataX工作笔记008

最近在做大数据相关功能,有个需求,使用datax同步hbase到hbase中,其中还是有很多细节值得记录: 首先来看一下datax的源码中,如果你使用phoenix创建的表,那么 你就需要使用对应的hbase带有sql字样的,reader和writer. 然后如果你使用datax-web来进行测试的,那么,他默认使用的是h…...

Python解决“小D的abc字符变换”问题

小D的“abc”变换问题 问题描述测试样例解题思路代码 问题描述 小D拿到了一个仅由 “abc” 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换&#xff1a; 将 ‘a’ 变成 ‘bc’ 将 ‘b’ 变成 ‘ca’ 将 ‘c’ 变成 ‘ab’ 小D将重复该操作 k 次。你的任务是输…...

C++学习:六个月从基础到就业——面向对象编程:重载运算符(下)

C学习&#xff1a;六个月从基础到就业——面向对象编程&#xff1a;重载运算符&#xff08;下&#xff09; 本文是我C学习之旅系列的第十三篇技术文章&#xff0c;是面向对象编程中运算符重载主题的下篇。本篇文章将继续深入探讨高级运算符重载技术、特殊运算符、常见应用场景和…...

电压模式控制学习

电压模式控制 在开关电源中&#xff0c;大的可分为三大控制模式&#xff0c;分别是电压模式控制&#xff0c;电流模式控制&#xff0c;迟滞模式控制。今天简要介绍下电压模式控制的优缺点。 原理 架构图如下 如图所示&#xff0c;电压模式控制可以分为三部分&#xff1a;误…...

vue3 Ts axios 封装

vue3 Ts axios 封装 axios的封装 import axios, { AxiosError, AxiosInstance, InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosHeaders } from axios import qs from qs import { config } from ./config import { ElMessage } from element-plus// …...

GPT,Bert类模型对比

以下是对 BERT-base、RoBERTa-base、DeBERTa-base 和 DistilBERT-base 四个模型在参数量、训练数据、GPU 内存占用、性能表现以及优缺点方面的对比&#xff1a; 模型参数量与训练数据 模型参数量训练数据量BERT-base110MBookCorpus&#xff08;8亿词&#xff09; 英文维基百科…...

3.Rust + Axum 提取器模式深度剖析

摘要 深入解读 Rust Axum 提取器模式&#xff0c;涵盖内置提取器及自定义实现。 一、引言 在 Rust 的 Web 开发领域&#xff0c;Axum 作为一款轻量级且高效的 Web 框架&#xff0c;为开发者提供了强大的功能。其中&#xff0c;提取器&#xff08;Extractor&#xff09;模式…...

Dify vs n8n vs RAGFlow:2025年AI应用与自动化工作流平台的终极对决

我将为大家整理一份关于 Dify、n8n 和 Ragflow 的最新研究分析,涵盖以下六个方面:功能对比、应用场景、架构设计、集成能力、和使用门槛。我会尽可能引用其官方文档、GitHub 仓库以及社区讨论等权威信息来源。 我整理好后会第一时间通知你查看。 1.Dify、n8n 和 RAGFlow 最新…...

ffmpeg无损转格式的命令行

将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码...

Flutter 常用命令

1、创建项目 flutter create <项目名称> 示例&#xff1a; flutter create my_app 1.1 参数说明 --org&#xff1a;设置包名&#xff08;默认 com.example&#xff09; flutter create --org com.yourcompany my_app -a/-i&#xff1a;指定语言&#xff08;Kotlin…...

【零基础】基于DeepSeek-R1与Qwen2.5Max的行业洞察自动化平台

自动生成行业报告,通过调用两个不同的大模型(DeepSeek 和 Qwen),完成从行业趋势分析到结构化报告生成的全过程。 完整代码:https://mp.weixin.qq.com/s/6pHi_aIDBcJKw1U61n1uUg 🧠 1. 整体目的与功能 该脚本实现了一个名为 ReportGenerator 的类,用于: 调用 DeepSe…...

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画&#xff0c;可以用来录制场景中物体的动画 创建一个关卡序列…...

1.凸包、极点、极边基础概念

目录 1.凸包 2.调色问题 3.极性(Extrem) 4.凸组合(Convex Combination) 5.问题转化(Strategy)​编辑 6.In-Triangle test 7.To-Left-test 8.极边&#xff08;Extream Edges&#xff09; 1.凸包 凸包就是上面蓝色皮筋围出来的范围 这些钉子可以转换到坐标轴中&#xff0…...

MahApps.Metro:专为 WPF 应用程序设计的 UI 框架

推荐一个WPF 应用程序设计的 UI 框架&#xff0c;方便我们快速构建美观、流畅的应用程序。 01 项目简介 MahApps.Metro 是一个开源的 UI 框架&#xff0c;它可以让开发者快速构建现代化、美观的 WPF 应用程序。 提供了一套完整的 UI 组件和主题&#xff0c;支持流畅的动画效…...

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini&#xff0c;Spring Boot整合实战&#xff01; 前言&#xff1a;当Java遇上大模型 在AI浪潮席卷全球的今天&#xff0c;Java开发者如何快速拥抱大语言模型&#xff1f;LangChain4j作为专为Java打造的AI开发框架&#xff0c…...

乐言科技:云原生加速电商行业赋能,云消息队列助力降本 37%

深耕 AI SaaS&#xff0c;助力数万电商客户数智化转型 上海乐言科技股份有限公司&#xff08;以下简称“乐言科技”&#xff0c;官网&#xff1a;https://www.leyantech.com/&#xff09;自 2016 年成立以来&#xff0c;专注于利用自然语言处理和深度学习等核心 AI 技术&#…...

vscode构建简单编译和调试环境

一、设置环境变量‌ 将bin目录路径&#xff08;如D:\DevTools\mingw64\bin&#xff09;加入系统环境变量PATH‌34 ‌二、VS Code插件配置‌ ‌核心插件安装‌ ‌C/C‌&#xff08;微软官方扩展&#xff0c;提供语法高亮、智能提示&#xff09;‌‌Code Runner‌&#xff0…...

STM32控制DRV8825驱动42BYGH34步进电机

最近想玩一下人工智能&#xff0c;然后买了个步进电机想玩一下&#xff0c;刚到了一脸懵逼&#xff0c;发现驱动器20多块&#xff0c;有点超预算&#xff0c;然后整了个驱动板&#xff0c;方便自己画线路板&#xff0c;经过各种搜索&#xff0c;终于转起来了&#xff0c;记录一…...

系统清理专家,一键释放磁盘空间!

打工人们你们好&#xff01;这里是摸鱼 特供版~ 今天给大家带来一款超实用的系统清理工具——Glary Disk Cleaner&#xff0c;帮助你快速清理系统中的垃圾文件&#xff0c;释放磁盘空间&#xff0c;提升系统运行速度&#xff01; 推荐指数&#xff1a;★★★★★ 软件简介 G…...

识别法院PDF文件特定字段并插入数据库【正则表达式+本地化部署】

pdf解析法院协助单特定字段&#xff0c;开源项目&#xff0c;结合若依项目进行开发&#xff0c;不连互联网&#xff0c;本地开发部署&#xff0c;前端使用vue3技术,后端用若依分离版spring botot技术&#xff0c;实现将pdf法院协助执行通知书中的特定字段如&#xff1a;时间、文…...

探索智能体开发新范式:Cangjie Magic深度解析与实践指南

引言&#xff1a;智能体开发的新纪元 2025年3月&#xff0c;仓颉社区开源了基于仓颉编程语言原生构建的LLM Agent开发平台——Cangjie Magic&#xff0c;为智能体开发领域带来了革命性的变革。作为一名长期关注AI技术发展的开发者&#xff0c;我有幸在第一时间体验了这一创新平…...

计算机网络 - UDP协议

通过一些问题来讨论 UDP 协议 什么是 UDP&#xff1f;举几个应用了 UDP 协议的例子UDP 与 TCP 有啥区别&#xff1f;&#xff08;PS&#xff1a;介绍三四个就可以了&#xff0c;不用说太多&#xff09;具体 UDP 是不可靠的&#xff0c;那你觉得如何实现一个可靠的 UDP &#x…...