Vue3 响应式系统——ref 和 reactive

news/2026/1/18 14:34:30/文章来源:https://www.cnblogs.com/haoxiugong/p/19498473

一、Vue3 响应式系统概述

Vue3 响应式包 @vue/reactivity,核心由三部分构成:

数据 (Proxy Object)  —— 依赖收集 Track  —— 触发更新 Trigger  ——  Effect 执行更新

核心目标:

  • 拦截读取和设置操作
  • 收集依赖
  • 在数据变化时重新触发相关副作用

主要实现 API:

二、reactive() 执行机制

2.1 核心逻辑(核心源码)

function reactive(target) {return createReactiveObject(target, false, mutableHandlers)
}function createReactiveObject(target, isReadonly, baseHandlers) {if (!isObject(target)) {return target}if (target already has proxy) return existing proxyconst proxy = new Proxy(target, baseHandlers)cache proxyreturn proxy
}

Vue3 用 ​Proxy 拦截对象操作​,比 Vue2 的 Object.defineProperty 更强(能监听属性增删)。

2.2 reactive 的 handler(简化)

const mutableHandlers = {get(target, key, receiver) {const res = Reflect.get(target, key, receiver)track(target, key)return isObject(res) ? reactive(res) : res},set(target, key, value, receiver) {const oldValue = target[key]const result = Reflect.set(target, key, value, receiver)if (oldValue !== value) {trigger(target, key)}return result}
}

三、依赖收集和触发更新:track()trigger()

Vue 内部维护一个 ​全局的 activeEffect​:

let activeEffect = nullfunction effect(fn) {activeEffect = wrappedEffect(fn)fn() // 执行一次用于收集依赖activeEffect = null
}

每次读取(get)响应式数据时:

function track(target, key) {if (!activeEffect) returnconst depsMap = targetMap.get(target) || new Map()const dep = depsMap.get(key) || new Set()dep.add(activeEffect)
}

当数据被设置(set)时:

function trigger(target, key) {const depsMap = targetMap.get(target)const dep = depsMap?.get(key)dep?.forEach(effect => effect())
}
  • track 只在 读取时收集依赖
  • trigger 只在 数据修改时触发 effect 重新执行

四、ref() 的设计与区别

4.1 ref 是什么?

ref() 主要用于包装 基本类型 (对于对象引用类型内部直接调用上面的 reactive()):

const count = ref(0)

其结构本质上是:

interface RefImpl {value: T
}

源码核心:

function ref(rawValue) {return createRef(rawValue)
}function createRef(rawValue) {const refImpl = { _value: convert(rawValue), dep: new Set(), // 区别于reactive引用类型复杂的多层嵌套数据结构封装dep,ref这里直接在实例中存放一个dep来实现get value() {trackRefValue(refImpl)return refImpl._value},set value(newVal) {if (hasChanged(newVal, refImpl._value)) {refImpl._value = convert(newVal)triggerRefValue(refImpl)}}}return refImpl
}

4.2 ref vs reactive 的本质区别

五、template / setup 中的自动 unwrap

在 Vue 模板中:

<p>{{ count }}</p>

如果 count 是一个 ref,它会 ​自动解包​,模板中不需要写 .value。这是由编译阶段的 transform 实现的。

六、响应式系统执行流程图(简化)

reactive/ref 数据 -> Proxy getter -> track│effect 注册│数据 setter -> trigger↓重新执行 effect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1178471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记

使用 perf FlameGraph 生成火焰图&#xff08;Flame Graph&#xff09;笔记使用 perf FlameGraph 生成火焰图&#xff08;Flame Graph&#xff09;笔记一、什么是火焰图&#xff08;Flame Graph&#xff09;火焰图的核心含义二、整体流程概览三、准备环境1️⃣ 安装 perf2️⃣…

深度测评10个AI论文写作软件,研究生高效写作必备!

深度测评10个AI论文写作软件&#xff0c;研究生高效写作必备&#xff01; AI 工具如何助力论文写作&#xff1f;这些功能你不可不知 在当今学术研究日益激烈的环境下&#xff0c;研究生们面临着越来越高的论文写作要求。无论是开题报告、文献综述&#xff0c;还是实验分析和结论…

基于深度学习和熔池图像对的焊缝熔透状态识别【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 双棱镜单摄像机被动立体视觉系统的设计与熔池图像采集熔化极气体保护焊接过程中&…

导入自己的听歌时长数据,统计每周听歌总时长,输出音乐风格偏好分析。

1. 实际应用场景描述场景某音乐爱好者使用音乐平台听歌&#xff0c;并导出自己的听歌记录&#xff08;日期、歌曲名、歌手、音乐风格、听歌时长&#xff09;。他希望&#xff1a;- 统计每周听歌总时长- 分析音乐风格偏好- 根据数据调整歌单&#xff0c;发现更多喜欢的音乐痛点-…

python基于Web技术的智能养老管理系统

目录基于Web技术的智能养老管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Web技术的智能养老管理系统摘要 随着人口老龄化加剧&#xff0c;传统养老模式面临资源分配不均、…

python基于大数据文化产业发展智能分析系统

目录基于大数据文化产业发展智能分析系统的摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于大数据文化产业发展智能分析系统的摘要 随着文化产业的快速发展&#xff0c;大数据技术成…

MySQL面试中,锁机制必问的5大问题!

文章目录MySQL中有哪几种锁&#xff1f;引言&#xff1a;为什么我们要聊锁&#xff1f;第一部分&#xff1a;MySQL中的锁类型1. 表级锁&#xff08;Table Lock&#xff09;示例&#xff1a;MyISAM 表的表级锁配置建议2. 行级锁&#xff08;Row Lock&#xff09;示例&#xff1a…

Questions for the Technical Advisory Board - 2

Elections 选举 Williams then posed a question to his fellow TAB members: with the (recently closed) TAB election, what do they want to see next year? What should the TAB be looking at? And for the non-TAB audience members: what conversations can the TAB…

前馈/反馈控制是什么

前馈/反馈控制是什么 在航天工程中&#xff0c;卫星姿态控制系统&#xff08;Attitude Control System, ACS&#xff09;是确保卫星正确指向、稳定运行和完成任务的核心子系统。无论是对地观测卫星精确对准地球表面&#xff0c;还是通信卫星将天线指向地面站&#xff0c;亦或是…

2025年市面上有实力的尘埃粒子计数器源头厂家排行榜,在线式粒子计数器/尘埃粒子检测仪供应厂家电话 - 品牌推荐师

随着工业4.0与智能制造的深度推进,洁净环境监测需求呈现爆发式增长。尘埃粒子计数器作为洁净车间、半导体制造、生物医药等领域的核心检测设备,其技术精度与稳定性直接影响生产质量与合规性。然而,市场鱼龙混杂,部…

2025年市场技术好的楼板搭建公司推荐,现浇楼梯/楼板现浇/钢筋混凝土现浇/现浇搭建/楼梯现浇,楼板搭建报价口碑推荐 - 品牌推荐师

随着城市化进程加速,楼板搭建作为建筑结构改造的核心环节,需求量持续攀升。然而,行业准入门槛低、施工标准参差不齐等问题,导致市场鱼龙混杂。业主在选择服务商时,往往面临“低价陷阱”“工期拖延”“质量隐患”等…

小程序 智能ai技术的基于Spring Boot的宠物(狗)健康管理的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着宠物经济的快速发展&#xff0c;宠物健康管理需求日益增长。基于Spring Boot框架和智能AI技术&#xff0c;设计并实现了一…

全网最全自考必看!10款AI论文工具测评TOP10

全网最全自考必看&#xff01;10款AI论文工具测评TOP10 2026年自考论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文工具在学术写作中的应用越来越广泛。对于自考学生而言&#xff0c;撰写高质量论文不仅是学业要求&am…

【开题答辩全过程】以 基于微信小程序健康跑平台的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

python网络招聘信息分析系统的设计与实现 boss直聘 爬虫 技术的猎聘数据可视化分析

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着互联网招聘平台的普及&#xff0c;网络招聘信息分析系统成为企业招聘和求职者决策的重要工具。基于Python的网络招聘信息分…

【开题答辩全过程】以 基于Android的高校员工考勤系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

SKF轴承动力学仿真信号分析代码功能说明

ANSYS WORKBENCH轴承动力学仿真&#xff0c;ANSYS做内圈、外圈和滚子故障的模拟图片为凯斯西储大学SKF轴承内外圈故障的结果&#xff0c;振动加速度包络后故障特征频率可以与实验相差仅为5%。一、代码整体概述 本次分析的代码集源自SKF轴承动力学仿真模型&#xff0c;包含3个核…

URL地址末尾加不加”/“有什么区别

URL 结尾是否带 / 主要影响的是 服务器如何解析请求 以及 相对路径的解析方式&#xff0c;具体区别如下&#xff1a;1. 基础概念URL&#xff08;统一资源定位符&#xff09; &#xff1a;用于唯一标识互联网资源&#xff0c;如网页、图片、API等。目录 vs. 资源&#xff1a;以 …

珲春好吃的烤肉哪家好吃

珲春好吃的烤肉&#xff0c;延炭乳酸菌烤肉不容错过在珲春&#xff0c;烤肉是当地美食文化的重要组成部分&#xff0c;众多烤肉店各有特色。而延炭乳酸菌烤肉凭借其独特的健康理念和美味菜品脱颖而出&#xff0c;成为食客们的心头好。主打健康&#xff0c;腌制独特延炭乳酸菌烤…

AI数据报告产品在文旅景区运营中的实践与技术搭建

AI数据报告产品在文旅景区运营中的实践与技术搭建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…