vue3-computed
computed计算属性是 Vue 3 中处理派生状态Derived State的核心利器。它的本质是“响应式数据的缓存计算器”。结合你已经学过的watch和methods我用“Excel 单元格公式”来类比原始数据是A1和B1计算属性就像SUM(A1:B1)——只有当A1或B1变了求和结果才会重新计算否则直接读缓存。下面我为你彻底拆解computed的语法、缓存机制、与watch/methods的本质区别以及TypeScript 中的类型陷阱。1. 基础语法只读计算属性在组合式 APIscript setup中computed接收一个getter 函数返回一个不可变的Ref对象。script setup langts import { ref, computed } from vue // 原始数据 const firstName ref(张) const lastName ref(三) // 计算属性返回全名 const fullName computed(() { return firstName.value lastName.value }) // 模板中直接用不需要 .value // 但在 JS 逻辑中访问需要 .value console.log(fullName.value) // 输出: 张三 /script template p{{ fullName }}/p !-- 自动解包显示 张三 -- /template核心特性只要firstName或lastName不变多次访问fullName.value会直接返回缓存结果不会重新执行 getter 函数。2. 进阶语法可写计算属性虽然 90% 的场景计算属性是只读的但你也可以定义一个setter实现“修改派生值影响原始值”的效果类似 Vuex 的commit。script setup langts const firstName ref(张) const lastName ref(三) const fullName computed({ // getter读取时触发 get: () firstName.value lastName.value, // setter赋值时触发比如 v-model 绑定 set: (newValue: string) { const names newValue.split( ) firstName.value names[0] || lastName.value names[1] || } }) // 当执行 fullName.value 李 四 时会触发 setter // 自动把 firstName 改为 李lastName 改为 四 /script template !-- 双向绑定可写计算属性非常优雅 -- input v-modelfullName / /template警告setter 里绝对不能修改计算属性本身即不能fullName.value xxx内部又触发 setter这会造成死循环。3.computedvsmethods缓存机制的降维打击这是面试最常问的对比我直接用代码演示性能差异script setup langts import { ref, computed } from vue const count ref(1) // 1. 计算属性有缓存 const computedDouble computed(() { console.log(计算属性重新计算了) return count.value * 2 }) // 2. 方法无缓存每次调用都重新执行 const methodDouble () { console.log(方法重新执行了) return count.value * 2 } /script template div !-- 在模板中调用 3 次计算属性 -- p{{ computedDouble }}/p !-- 打印 1 次 计算属性重新计算了 -- p{{ computedDouble }}/p !-- 直接读缓存不打印 -- p{{ computedDouble }}/p !-- 直接读缓存不打印 -- !-- 在模板中调用 3 次方法 -- p{{ methodDouble() }}/p !-- 打印 1 次 -- p{{ methodDouble() }}/p !-- 打印 1 次 -- p{{ methodDouble() }}/p !-- 打印 1 次 -- !-- 总共打印 3 次 -- /div /template结论methods适合事件处理或每次都需要重新计算的场景如带参数的格式化。computed适合依赖响应式数据且计算开销较大的场景如数组过滤、复杂数学计算。4.computedvswatch本质不同对比维度computedwatch定位派生新数据输入 → 输出执行副作用输入 → 触发动作是否有返回值✅必须 return❌ 没有返回值只执行逻辑缓存✅ 有缓存依赖不变就不重新计算❌ 无缓存只要数据变化就执行回调典型场景过滤列表、格式化文本、拼接姓名发 API 请求、打印日志、操作 DOM实战对比// ✅ 用 computed根据搜索词过滤列表派生新数组 const filteredList computed(() { return list.value.filter(item item.includes(searchKey.value)) }) // ✅ 用 watch搜索词变了去后端拉新数据执行副作用 watch(searchKey, (newKey) { fetchListByKey(newKey) // 发请求 })5. TypeScript 类型标注让 VSCode 精准提示computed在 TypeScript 中自动推导类型但遇到复杂对象或联合类型时需要显式标注。① 自动推导大多数情况够用const count ref(1) const double computed(() count.value * 2) // double 被自动推断为 ComputedRefnumber② 显式泛型处理可能返回null或undefined的情况// 假设返回可能是 User 对象或 null const user refUser | null(null) // 显式声明返回类型避免 TS 报错 const displayName computedstring(() { if (user.value) { return user.value.name } return 未登录 // 保证总是返回 string })③ 可写计算属性的类型Set 参数自动检查const fullName computedstring({ get: () firstName.value lastName.value, set: (newVal: string) { // newVal 被限定为 string // ... } })6. ⚠️ 致命陷阱新手必踩的 3 个坑陷阱 1在计算属性里修改其他响应式数据副作用// ❌ 绝对禁止 const count ref(0) const double computed(() { count.value // 在 getter 里改了别的响应式数据会触发无限循环 return count.value * 2 })原则计算属性的 getter必须是无副作用的纯函数只读不写。陷阱 2在模板中反复调用方法代替计算属性导致性能浪费!-- ❌ 不好每次渲染都重新计算且无法缓存 -- p{{ formatPrice(price) }}/p !-- ✅ 推荐用计算属性自动缓存 -- p{{ formattedPrice }}/p陷阱 3忘记.value尤其在script中const fullName computed(() firstName.value lastName.value) // ❌ 错误fullName 本身是一个 Ref 对象 console.log(fullName) // 输出 RefImpl 对象 // ✅ 正确必须取 .value console.log(fullName.value) // 输出 张三7. 结合你之前的代码给父组件添加计算属性在你的父组件中provideData有theme和version你可以派生一个新状态const provideData reactive({ theme: dark, version: 1.0.0, }) // 派生一个显示用的主题描述只读 const themeDescription computed(() { return provideData.theme dark ? 暗色模式 : ☀️ 亮色模式 })然后在模板中用{{ themeDescription }}显示当provideData.theme变化时描述自动更新。8. 性能优化进阶computed的懒计算computed是懒执行的即使依赖的数据变了如果没有任何地方访问computed的值它不会立即重新计算。只有当你真正去读.value或模板渲染它时它才会“迫不得已”重新计算。这比watch更高效watch是数据一变立即执行回调不管你用不用结果。总结记忆口诀computed是“缓存计算器”依赖不变不重算methods是“手动工具”每次调用都重算watch是“监控雷达”数据一变就触发动作。Getter 必须纯Setter 别自循环。现在去你的项目里找一个数组比如userList写一个computed来过滤出age 18的用户列表并尝试在模板中渲染。如果遇到 TS 类型报错记得加上泛型computed{...}[](() ...)

相关新闻

仿冒招商泛滥,御京荷只认总部直招

仿冒招商泛滥,御京荷只认总部直招

近些年烤鸭轻创业热度一路走高,不少想做小生意、打算开档口的朋友,都把目光投向了门槛适中、受众稳定的御京荷北京烤鸭。凭借成熟的焖烤工艺、标准化出品、完善的供应链扶持,以及适配夫妻小店、街边档口的轻量化开店模式,御京荷凭…

2026/8/3 7:25:37 阅读更多 →
SpringBoot+Vue图书电商系统开发实践

SpringBoot+Vue图书电商系统开发实践

1. 项目概述这个图书电商管理系统采用前后端分离架构,前端使用Vue.js框架,后端基于SpringBoot构建,数据存储采用MySQL关系型数据库,ORM层使用MyBatis实现。系统实现了图书信息管理、用户管理、订单处理等核心电商功能模块&#xf…

2026/8/3 7:25:37 阅读更多 →
时间戳本质、时区陷阱与毫秒级精度:系统设计的核心基石

时间戳本质、时区陷阱与毫秒级精度:系统设计的核心基石

1. 从“时间戳”聊起:一个被误解的基石概念 如果你在技术圈待过一阵子,或者哪怕只是写过几行代码,大概率都听过“时间戳”这个词。它听起来简单,不就是个时间嘛。但恰恰是这个看似简单的概念,在实际开发、运维、数据分…

2026/8/3 7:25:37 阅读更多 →

最新新闻

重庆哪里可以找到专业的多媒体会议音视频系统工厂?

重庆哪里可以找到专业的多媒体会议音视频系统工厂?

在重庆,若想找到专业的多媒体会议音视频系统工厂,重庆优沃科技有限公司是不错的选择。该公司成立于2011年5月,坐落于重庆市九龙坡区石桥铺,是西南地区深耕多年的音视频系统集成与智能化弱电工程服务商。以下从几个方面详细介绍该公…

2026/8/4 16:36:33 阅读更多 →
靠谱的多媒体会议室音响厂商有哪些可以选择呢?

靠谱的多媒体会议室音响厂商有哪些可以选择呢?

靠谱的多媒体会议室音响厂商有不少,XULA音响就是其中之一,此外还有JBL、BOSE等品牌。以下为你详细介绍:XULA音响XULA音响是重庆优沃科技有限公司旗下的自有品牌。该公司自2011年成立以来,深耕音视频集成与智能化弱电赛道&#xff…

2026/8/4 16:36:33 阅读更多 →
【AI古风插画创作终极指南】:零基础3天掌握Stable Diffusion+ControlNet古风构图秘技

【AI古风插画创作终极指南】:零基础3天掌握Stable Diffusion+ControlNet古风构图秘技

更多请点击: https://codechina.net 第一章:AI古风插画创作的认知跃迁与技术全景 传统古风插画依赖深厚的人文积淀与手绘功底,而AI创作正推动一场静默却深刻的认知跃迁:从“技法复刻”转向“风格解构—语义重组—文化再生”的三层…

2026/8/4 16:36:33 阅读更多 →
Jmeter压测实战:Jmeter二次开发之自定义函数详解

Jmeter压测实战:Jmeter二次开发之自定义函数详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具,具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳、大小写转换…

2026/8/4 16:36:32 阅读更多 →
Unity WebGL AvproVideo视频卡顿:从编码到播放的全链路解决方案

Unity WebGL AvproVideo视频卡顿:从编码到播放的全链路解决方案

1. 问题现象与背景剖析最近在折腾一个Unity网页端项目,用AvproVideo插件(版本2.6.3)来播放首页的背景视频,结果遇到了一个挺典型的坑:视频文件明明已经加载完成了,进度条也走满了,但画面就是卡在…

2026/8/4 16:36:32 阅读更多 →
微信小程序健身房预约系统开发全解析

微信小程序健身房预约系统开发全解析

1. 项目概述:微信小程序健身房预约系统全解析 这套健身房预约系统是我为本地连锁健身中心开发的线上解决方案,上线三个月内帮助客户将预约率提升47%,会员留存率提高32%。系统采用微信小程序作为前端入口,后端基于Node.jsMySQL架构…

2026/8/4 16:35:32 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →