news 2026/4/16 19:06:23

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/4/16 11:07:14

PRQL多语言集成:企业级数据查询的革命性解决方案

PRQL多语言集成&#xff1a;企业级数据查询的革命性解决方案 【免费下载链接】prql PRQL/prql: 是一个类似于 SQL 的查询语言实现的库。适合用于查询各种数据库和数据格式。特点是支持多种数据库类型&#xff0c;提供了类似于 SQL 的查询语言。 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/4/16 12:39:51

Qwen3-Omni多模态AI模型终极部署指南:5分钟快速上手实战

想要在本地快速体验多模态AI的强大功能吗&#xff1f;Qwen3-Omni-30B-A3B-Instruct作为开源AI领域的明星产品&#xff0c;原生支持文本、图像、音视频输入&#xff0c;还能实时生成语音响应。本文将带你从零开始&#xff0c;5分钟完成环境配置&#xff0c;快速掌握这个智能对话…

作者头像 李华
网站建设 2026/4/16 11:06:12

Node.js ESC/POS打印实战手册:解锁硬件控制新境界

Node.js ESC/POS打印实战手册&#xff1a;解锁硬件控制新境界 【免费下载链接】node-escpos &#x1f5a8;️ ESC/POS Printer driver for Node.js 项目地址: https://gitcode.com/gh_mirrors/no/node-escpos 在数字化转型浪潮中&#xff0c;打印机作为连接数字世界与物…

作者头像 李华
网站建设 2026/4/16 18:18:35

国巨薄膜精密电阻RT0805系列的噪声水平及适合的应用

国巨&#xff08;YAGEO&#xff09;RT0805系列薄膜精密电阻&#xff0c;是目前市场上兼具高精度、高稳定性与小型化优势的0805封装电阻代表。其具体系列包括RT0805FRB07、RT0805FRD07、RT0805FRE07、RT0805FRE10、RT0805FRE13、RT0805FRF07、RT0805LRB07、RT0805LRC07、RT0805L…

作者头像 李华
网站建设 2026/4/16 12:46:40

XVim终极指南:如何在Xcode中实现Vim高效编辑体验

XVim终极指南&#xff1a;如何在Xcode中实现Vim高效编辑体验 【免费下载链接】XVim Xcode plugin for Vim keybindings 项目地址: https://gitcode.com/gh_mirrors/xv/XVim 想要在Xcode开发环境中体验Vim的高效编辑魅力吗&#xff1f;XVim插件正是你梦寐以求的解决方案。…

作者头像 李华
网站建设 2026/4/16 14:24:57

深度学习模型推理效率优化实践指南

深度学习模型推理效率优化实践指南 【免费下载链接】verl verl: Volcano Engine Reinforcement Learning for LLMs 项目地址: https://gitcode.com/GitHub_Trending/ve/verl 在当今AI应用场景中&#xff0c;模型推理效率已成为影响系统性能的关键因素。本文基于实际项目…

作者头像 李华