news 2026/8/7 23:10:29

AttributeModifier与AttributeUpdater区别及源码使用DEMO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AttributeModifier与AttributeUpdater区别及源码使用DEMO

AttributeModifier与AttributeUpdater区别及源码使用DEMO

一、结论

鸿蒙ArkUI中AttributeModifier和AttributeUpdater均用于组件属性动态配置,核心差异在于更新机制与适用场景:

AttributeModifier是基础属性设置接口,主打多状态样式封装、共享UI样式、小批量属性更新,需绑定@State状态变量触发UI更新。

AttributeUpdater继承自AttributeModifier,主打属性直通更新、大批量属性修改、组件构造入参变更,可绕过@State机制直接触发UI更新,解决Modifier大批量修改的性能损耗问题。

二、代码实现和详细解释

1、通过基础示例分别实现AttributeModifier(多状态样式+小批量更新)和AttributeUpdater(直通更新+大批量修改+构造入参变更),直观对比两者的使用方式和更新机制。

import{AttributeUpdater}from'@ohos.arkui.modifier'/** * AttributeUpdater定义 */classMyButtonUpdateextendsAttributeUpdater<ButtonAttribute>{// 首次绑定时触发initializeModifier方法,进行属性初始化initializeModifier(instance:ButtonAttribute):void{instance.width('50%').height(30)}}/** * AttributeModifier定义 */classMyButtonModifierimplementsAttributeModifier<ButtonAttribute>{isDark:boolean=falseapplyNormalAttribute(instance:ButtonAttribute):void{if(this.isDark){instance.backgroundColor(Color.Blue)}else{instance.backgroundColor(Color.Red)}}}@Entry @Component struct Index{// AttributeUpdater 虽然继承于AttributeModifier需要使用,但是自带更新属性的能力update:MyButtonUpdate=newMyButtonUpdate();// AttributeModifier需要使用@State进行数据绑定,控件才能支持动态更新。// @State modifier: MyButtonModifier = new MyButtonModifier();build(){Row(){Column(){Button("Button")// .attributeModifier(this.modifier).attributeModifier(this.update).onClick(()=>{// this.modifier.isDark = !this.modifier.isDark// 通过attribute,直接修改组件属性,并立即触发组件属性更新this.update.attribute?.width('100%')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 8:36:38

浅析NCE0130KA在功率开关设计中的应用特性

在各类电源与开关电路设计中&#xff0c;选择合适的功率MOSFET尤为关键。南山电子代理的新洁能NCE0130KA作为一款N沟道增强型功率MOSFET&#xff0c;凭借其技术特点&#xff0c;在多个应用场景中表现出稳定的电气性能。一、主要电气参数概述NCE0130KA的漏源电压&#xff08;VDS…

作者头像 李华
网站建设 2026/8/4 21:49:40

学习Java27天

字符串的比较1. equals() 方法java// 语法&#xff1a;字符串1.equals(字符串2) // 功能&#xff1a;比较两个字符串的内容是否完全相同&#xff08;区分大小写&#xff09; // 返回值&#xff1a;boolean&#xff08;true表示相同&#xff0c;false表示不同&#xff09;String…

作者头像 李华
网站建设 2026/8/5 4:46:37

ThingsBoard物联网平台消息队列实战:3大核心技术架构深度解析

ThingsBoard物联网平台消息队列实战&#xff1a;3大核心技术架构深度解析 【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard …

作者头像 李华
网站建设 2026/8/5 0:55:06

Free Sidecar终极指南:5分钟解锁macOS多屏扩展功能

Free Sidecar终极指南&#xff1a;5分钟解锁macOS多屏扩展功能 【免费下载链接】free-sidecar Enable Sidecar on Unsupported iPads and Macs running iPadOS 13 and macOS Catalina 项目地址: https://gitcode.com/gh_mirrors/fr/free-sidecar Free Sidecar是一个突破…

作者头像 李华
网站建设 2026/8/6 16:32:26

Universe性能优化终极指南:cProfile与火焰图实战分析

Universe是一个用于测量和训练AI通用智能的软件平台&#xff0c;能够跨越全球的游戏、网站和其他应用程序。作为AI训练的重要基础设施&#xff0c;Universe平台的性能优化直接影响着AI模型训练的效率和质量。本文将深入探讨如何使用cProfile和火焰图工具对Universe进行全面的性…

作者头像 李华
网站建设 2026/8/6 8:07:52

DeeplxFile:免费跨平台文件翻译工具的完整使用指南

DeeplxFile&#xff1a;免费跨平台文件翻译工具的完整使用指南 【免费下载链接】DeeplxFile 基于Deeplx和Playwright提供的简单易用&#xff0c;快速&#xff0c;免费&#xff0c;不限制文件大小&#xff0c;支持超长文本翻译&#xff0c;跨平台的文件翻译工具 / Easy-to-use, …

作者头像 李华