鸿蒙中级课程笔记2—状态管理V2—@Computed装饰器:计算属性

当开发者使用相同的计算逻辑重复绑定在UI上时,为了防止重复计算,可以使用@Computed计算属性。计算属性中的依赖的状态变量变化时,只会计算一次。这解决了UI多次重用该属性导致的重复计算和性能问题。如下面例子。

@Computed get sum() { return this.count1 + this.count2 + this.count3; } Text(`${this.count1 + this.count2 + this.count3}`) // 计算this.count1 + this.count2 + this.count3 Text(`${this.count1 + this.count2 + this.count3}`) // 重复计算this.count1 + this.count2 + this.count3 Text(`${this.sum}`) // 读取@Computed sum的缓存值,节省上述重复计算 Text(`${this.sum}`) // 读取@Computed sum的缓存值,节省上述重复计算

说明

@Computed装饰器从API version 12开始支持。

从API version 12开始,该装饰器支持在元服务中使用。

概述

@Computed为方法装饰器,装饰getter方法。@Computed会检测被计算的属性变化,当被计算的属性变化时,@Computed只会被求解一次。不建议在@Computed中修改变量,错误的使用会导致数据无法被追踪或appfreeze等问题,详情见使用限制。

但需要注意,对于简单计算,不建议使用计算属性,因为计算属性本身也有开销。对于复杂的计算,@Computed能带来性能收益。

装饰器说明

@Computed语法:

@Computed get varName(): T { return value; }
@Computed方法装饰器说明
支持类型getter访问器。
从父组件初始化禁止。
可初始化子组件@Param。
被执行的时机

@ComponentV2中的@Computed会在自定义组件创建的时候初始化,触发@Computed计算。

@ObservedV2装饰的类中的@Computed,会在@ObservedV2装饰的类实例创建后,异步初始化,触发@Computed计算。

在@Computed中计算的状态变量被改变时,计算属性会重新计算。

是否允许赋值@Computed装饰的属性是只读的,不允许赋值,详情见使用限制。

使用限制

参考@Computed装饰器:计算属性

  • @Computed为方法装饰器,仅能装饰getter方法,其他用法编译时报错。

  • @Computed装饰的方法只有在初始化,或者其被计算的状态变量改变时,才会发生重新计算。不建议开发者在@Computed装饰的getter方法中做除获取数据外其余的逻辑操作。

  • 在@Computed装饰的getter方法中,不能改变参与计算的属性,以防止重复执行计算属性导致的appfreeze。

  • @Computed不能和双向绑定!!连用,@Computed装饰的是getter访问器,不会被子组件同步,也不能被赋值。开发者自己实现的计算属性的setter不生效,且产生编译时报错。

    @ComponentV2 struct Child { @Param double: number = 100; @Event $double: (val: number) => void; build() { Button('ChildChange') .onClick(() => { this.$double(200); }) } } @Entry @ComponentV2 struct Index { @Local count: number = 100; @Computed get double() { return this.count * 2; } // @Computed装饰的属性是只读的,开发者自己实现的setter不生效,编译时报错。 set double(newValue : number) { this.count = newValue / 2; } build() { Scroll() { Column({ space: 3 }) { Text(`${this.count}`) // 错误写法,@Computed装饰的属性是只读的,无法与双向绑定连用,编译时报错。 Child({ double: this.double!! }) } } } }
  • @Computed为状态管理V2提供的能力,只能在@ComponentV2和@ObservedV2中使用。

  • 多个@Computed一起使用时,警惕循环求解,以防止计算过程中的死循环。

使用场景

参考@Computed装饰器:计算属性

当被计算的属性变化时,@Computed装饰的getter访问器只会被求解一次

计算属性本身会带来性能开销,在实际应用开发中需要注意:

  • 对于简单的计算逻辑,可以不使用计算属性。
  • 如果计算逻辑在视图中仅使用一次,则不使用计算属性,直接求解。

@Computed装饰的属性可以被@Monitor监听变化

@Computed装饰的属性可以初始化@Param

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

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

相关文章

鸿蒙中级课程笔记2—状态管理V2—@Local

Local装饰器:组件内部状态 为了实现对ComponentV2装饰的自定义组件中变量变化的观测,开发者可以使用Local装饰器装饰变量。 在阅读本文档前,建议提前阅读:ComponentV2。常见问题请参考组件内状态变量常见问题。 说明 从API ve…

鸿蒙中级课程笔记2—状态管理V2—@Param

为了增强子组件接受外部参数输入的能力,开发者可以使用Param装饰器。 Param不仅可以接受组件外部输入,还可以接受Local的同步变化。在阅读本文档前,建议提前阅读:Local。 说明 从API version 12开始,在ComponentV2装…

鸿蒙中级课程笔记2—状态管理V2—@Once、@Event

Once:初始化同步一次 想要实现仅从外部初始化一次且不接受后续同步变化的能力,可以使用Once装饰器搭配Param装饰器。 阅读本文档前,请先阅读Param。 说明 从API version 12开始,在ComponentV2装饰的自定义组件中支持使用Once装…

2026广安种植牙优质机构推荐榜 高性价比之选

2026广安种植牙优质机构推荐榜 高性价比之选一、行业背景与评测依据据《2026中国口腔医疗行业发展白皮书》数据显示,我国45岁以上人群缺牙率达63.2%,65岁以上人群全口缺牙率超10%,口腔修复需求呈逐年攀升态势。 川东…

深入 Pinia 工作原理:响应式核心、持久化机制与缓存策略 - 教程

深入 Pinia 工作原理:响应式核心、持久化机制与缓存策略 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

构建AI Agent的自适应学习系统

构建AI Agent的自适应学习系统 关键词:AI Agent、自适应学习系统、机器学习、强化学习、神经网络 摘要:本文旨在深入探讨构建AI Agent的自适应学习系统这一前沿技术领域。通过详细阐述自适应学习系统的核心概念、算法原理、数学模型,结合项目实战案例,展示如何实现一个高效…

软件测试之单元测试

所谓单元测试指,指的是对软件中最小可测试单元开展细致的检查与验证工作。 具体而言,它主要用于检验单个类的准确性,确保其功能符合预期。 单元测试与集成测试、系统测试存在显著差异。它是软件开发流程中前置的测试环节,规模最…

京城爱加陪诊官方电话声明

为保障广大客户的合法权益,杜绝虚假信息误导,现就京城爱加陪诊(以下简称“我方”)官方联系电话事宜郑重声明如下: 我方唯一官方咨询及服务预约电话为:010-53656582。该电话为客户对接陪诊咨询、需求登记、服务沟…

如何高效阅读学术文献:硕士研究生完全指南

如何高效阅读学术文献:硕士研究生完全指南Posted on 2026-01-24 20:05 steve.z 阅读(0) 评论(0) 收藏 举报如何高效阅读学术文献:硕士研究生完全指南"What I cannot create, I do not understand." —…

windows版中间件启动 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:我在CSDN学MYSQL之----数据库基本概念和基本知识(上)

实用指南:我在CSDN学MYSQL之----数据库基本概念和基本知识(上)2026-01-24 20:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !im…

从0到1!AI提示工程架构师助力智能营销腾飞

从0到1!AI提示工程架构师助力智能营销腾飞 一、当智能营销遇上“卡脖子”:我们需要什么样的AI桥梁? 凌晨3点,某美妆品牌的营销总监盯着电脑屏幕上的12% email打开率发愁——这是第8次调整文案了,可用户依然对千篇一律…

华为MetaERP实现智能高效排产的核心是通过人工智能、大数据、数字孪生等技术与传统ERP生产计划模块深度融合,构建动态优化、实时响应的排产体系

华为MetaERP实现智能高效排产的核心是通过人工智能、大数据、数字孪生等技术与传统ERP生产计划模块深度融合,构建动态优化、实时响应的排产体系。以下是其关键实现路径:1. 基于AI的智能排产引擎多目标优化算法:综合考虑订单交期、产能利用率、…

一文读懂AI产品经理:职责、技能与学习路径全攻略,如何成为AI产品经理?

本文详细介绍了AI产品经理的定义、职责、类型及与传统互联网产品经理的区别,强调技术理解能力成为AI产品经理的核心门槛。文章分析了AI产品经理必备的算法理解、系统架构、数据分析和业务转化等能力,并为在校生和传统产品经理提供了转型路径。最后提供了…

收藏级干货:DeepSeek Engram架构解析:大模型语言理解的新思路

DeepSeek与北大联合发布Engram架构,将语言理解分为"推理"和"知识"两部分。通过2-Grams/3-Grams分词和Multi-Head Hash存储短语,结合Context-aware Gating机制解决多义词问题。Engram将传统模型中用于"组合固定短语"的大量…

知识图谱如何提升大模型性能?WeKnora实现原理与代码解析

WeKnora通过知识图谱增强大模型检索能力,采用LLM驱动实体和关系抽取,构建文档块关系网络。系统支持并发处理,使用PMIStrength混合算法计算关系权重,实现直接关联和间接关联查询,并提供可视化展示。这一GraphRAG方案解决…

大模型训练项目如何落地:完整流程与实战技巧

本文详解大模型训练三阶段(预训练、SFT微调、强化学习)及AI训练师工作。重点讲解项目落地流程:需求承接、标注规则制定(安全性、指令遵循、准确性等维度)、数据筛选与标注管理、质量控制与迭代。以SFT项目为例&#xf…

AI产品经理vs传统产品经理:大模型时代必备技能与学习路线

本文详细介绍了AI产品经理与传统产品经理的区别,强调"懂技术"是AI产品经理的必要条件。文章阐述了AI产品经理的职责、类型(软件/硬件产品经理)、必备技能(技术能力、数据分析、业务sense)以及成为路径。最后…

DeepSeek MODEL1架构级跃迁:从Transformer到状态空间模型的革命性突破

DeepSeek推出的MODEL1项目代表了一次大模型架构的跃迁,而非简单版本升级。它摒弃了Transformer架构,转向融合状态空间模型(SSM)与强化学习推理单元的新范式,引入可微分状态记忆体和递归推理单元,支持长程规划和动态状态追踪。若成…

大模型新架构STEM:静态稀疏化提升效率与稳定性,代码示例全解析【收藏必看】

STEM是由CMU与Meta开发的新型大模型稀疏架构,将FFN层的上投影矩阵替换为基于token ID的静态查找表,避免了MoE的动态路由问题。这种方法提升了计算效率(减少1/3计算量)、训练稳定性和知识可编辑性,同时具备"测试时容量扩展"特性&…