news 2026/1/31 12:10:19

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/1/31 1:38:15

Seal视频下载器如何通过Material You动态色彩实现个性化视觉革命

Seal视频下载器如何通过Material You动态色彩实现个性化视觉革命 【免费下载链接】Seal &#x1f9ad; Video/Audio Downloader for Android, based on yt-dlp, designed with Material You 项目地址: https://gitcode.com/gh_mirrors/se/Seal 在现代Android生态系统中&…

作者头像 李华
网站建设 2026/1/30 12:26:58

OBS多平台直播实战手册:精通高效推流配置

OBS多平台直播实战手册&#xff1a;精通高效推流配置 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp obs-multi-rtmp作为OBS Studio的专业级多平台推流解决方案&#xff0c;彻底改变了创…

作者头像 李华
网站建设 2026/1/31 1:38:12

JUCE音频开发终极指南:从零到专业级插件工程师

JUCE音频开发终极指南&#xff1a;从零到专业级插件工程师 【免费下载链接】JUCE 项目地址: https://gitcode.com/gh_mirrors/juc/JUCE 想要快速掌握音频插件开发技能&#xff1f;JUCE框架正是你实现这一目标的完美工具。作为业界领先的跨平台音频应用开发框架&#xf…

作者头像 李华
网站建设 2026/1/30 6:54:54

Agent Zero多语言界面终极配置指南:零代码解锁全球团队协作

Agent Zero多语言界面终极配置指南&#xff1a;零代码解锁全球团队协作 【免费下载链接】agent-zero Agent Zero AI framework 项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero Agent Zero AI框架提供全面的多语言界面配置功能&#xff0c;让用户无需编写…

作者头像 李华