computed 计算属性实现
computed 计算属性实现 | 源码解析系列 2.5一、引言computed计算属性是Vue中非常实用的特性它允许我们定义一个基于响应式数据的派生值。计算属性具有缓存机制只有当其依赖的响应式数据发生变化时才会重新计算。二、computed的基本概念2.1 什么是计算属性计算属性是一个基于响应式数据计算得出的新值它具有缓存机制。import{reactive,computed}fromvueconststatereactive({firstName:John,lastName:Doe})constfullNamecomputed((){console.log(计算中...)returnstate.firstName state.lastName})console.log(fullName.value)// 执行计算console.log(fullName.value)// 使用缓存不打印计算中...2.2 计算属性的特点计算属性有四个重要特点懒计算、缓存机制、依赖追踪和响应式。三、computed的实现原理3.1 computed工厂函数exportfunctioncomputedT(getterOrOptions:(()T)|WritableComputedOptionsT,debugOptions:DebuggerOptions{}){letgetter:()Tletsetter:(()void)|undefinedif(isFunction(getterOrOptions)){gettergetterOrOptions}else{gettergetterOrOptions.get settergetterOrOptions.set}returnnewComputedRefImpl(getter,setter,debugOptions)asany}3.2 ComputedRefImpl类classComputedRefImplT{private_value!:Tprivate_dirtytrueprivatereadonlyeffect:ReactiveEffectTconstructor(getter:()T,privatereadonly_setter:(()void)|undefined,debugOptions:DebuggerOptions){this.effecteffect(getter,{lazy:true,scheduler:(){if(!this._dirty){this._dirtytruetriggerRefValue(this)}}})}getvalue():T{trackRefValue(this)if(this._dirty){this._dirtyfalsethis._valuethis.effect()}returnthis._value}}四、懒计算与缓存机制4.1 懒计算的实现通过设置lazy: true创建effect时不立即执行。this.effecteffect(getter,{lazy:true,scheduler:(){/* ... */}})4.2 缓存机制工作流程第一次访问value时执行effect计算新值后续访问时直接返回缓存结果当依赖变化时scheduler将_dirty设为true。五、依赖追踪与触发更新5.1 计算属性的依赖收集计算属性内部使用effect来收集依赖。this.effecteffect(getter,{lazy:true,scheduler:(){/* ... */}})5.2 触发更新当计算属性的依赖变化时scheduler会被调用标记计算属性为dirty并触发依赖于它的effect。六、总结计算属性通过lazy选项实现懒计算通过_dirty标志实现缓存机制。它的实现巧妙地将响应式的依赖收集和触发更新机制结合起来既保证了计算结果的正确性又通过缓存机制提供了良好的性能。参考资料Vue3 官方源码https://github.com/vuejs/core

相关新闻

【MySQL】拿下数据撤离点:8 步从建表到分页,完成 SQL 基础的完美撤离

【MySQL】拿下数据撤离点:8 步从建表到分页,完成 SQL 基础的完美撤离

一、表的创建二、表的插入三、插入时更新四、替换五、基本 select六、where 条件mysql> select name,chinese,math,english,chinesemathenglish 总分 from exam_result where name like 孙_ or (chinesemathenglish>200 and chinese < math and english>80);七、结…

2026/7/4 17:05:32 阅读更多 →
网络分层模型:用快递秒懂网络分层

网络分层模型:用快递秒懂网络分层

如果你是刚入职的新人&#xff0c;或者正在备战校招的应届生&#xff0c;听到“OSI 七层模型”是不是头都大了&#xff1f;“表示层到底是干嘛的&#xff1f;” “TCP/IP 为什么只有四层&#xff1f;” “面试时到底该背七层还是五层&#xff1f;”今天这篇文&#xff0c;不让你…

2026/7/4 17:05:32 阅读更多 →
GDPR 3.0:个人数据“被遗忘权”代码实现——软件测试从业者指南

GDPR 3.0:个人数据“被遗忘权”代码实现——软件测试从业者指南

GDPR 3.0与“被遗忘权”概述 GDPR&#xff08;General Data Protection Regulation&#xff09;自2018年实施以来&#xff0c;已成为全球数据保护的标杆。假设GDPR 3.0是其进化版本&#xff0c;强化了“被遗忘权”&#xff08;Right to Be Forgotten&#xff09;&#xff0c;要…

2026/5/17 9:28:19 阅读更多 →

最新新闻

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验&#xff1a;免费开源工具终极指南 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop …

2026/7/4 17:04:56 阅读更多 →
FanControl如何解决现代PC散热控制的技术挑战?

FanControl如何解决现代PC散热控制的技术挑战?

FanControl如何解决现代PC散热控制的技术挑战&#xff1f; 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCon…

2026/7/4 17:04:56 阅读更多 →
Web自动化测试全流程解析:从Selenium基础到CI/CD集成实战

Web自动化测试全流程解析:从Selenium基础到CI/CD集成实战

1. 项目概述&#xff1a;为什么我们需要Web自动化测试&#xff1f;在软件开发&#xff0c;尤其是Web应用开发的日常工作中&#xff0c;测试是一个绕不开的环节。想象一下&#xff0c;你刚刚完成了一个新功能的开发&#xff0c;比如一个复杂的用户注册表单。你需要验证它在Chrom…

2026/7/4 17:02:56 阅读更多 →
YOLOv5模型构建与优化:从架构解析到注意力机制实战

YOLOv5模型构建与优化:从架构解析到注意力机制实战

1. YOLOv5模型构建原理深度解析 在目标检测领域&#xff0c;YOLOv5以其优异的性能和易用性广受欢迎。要真正掌握模型优化技巧&#xff0c;首先需要理解其构建机制的核心三要素&#xff1a; 1.1 模型架构定义文件&#xff08;yaml&#xff09; yolov5s.yaml 文件相当于建筑的…

2026/7/4 17:02:56 阅读更多 →
构建定制化Frida工具链:对抗检测与深度优化的移动安全实战

构建定制化Frida工具链:对抗检测与深度优化的移动安全实战

1. 项目概述&#xff1a;为什么我们需要一个“魔改”的Frida工具链&#xff1f;如果你在移动安全、应用逆向或者动态分析这个圈子里待过一阵子&#xff0c;Frida这个名字对你来说肯定不陌生。它就像一把瑞士军刀&#xff0c;能让你在运行时“为所欲为”——注入脚本、Hook函数、…

2026/7/4 17:02:56 阅读更多 →
炉石传说自动化脚本终极指南:如何快速上手智能游戏助手

炉石传说自动化脚本终极指南:如何快速上手智能游戏助手

炉石传说自动化脚本终极指南&#xff1a;如何快速上手智能游戏助手 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 厌倦了炉石传说中重复的点击操作&am…

2026/7/4 16:56:54 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布&#xff0c;这是一个关键的安全修复版本&#xff0c;修复了多个方面的问题&#xff0c;还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出&#xff0c;mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南&#xff1a;使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL&#xff08;Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器&#xff0c;与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻