news 2026/4/3 6:21: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/1 2:33:26

XVim插件实战指南:5个技巧让Xcode开发效率翻倍

还在为Xcode中繁琐的鼠标操作而烦恼吗&#xff1f;想要在iOS开发中体验Vim的高效编辑流畅感&#xff1f;XVim插件正是你的最佳选择&#xff01;这款强大的Xcode插件将经典的Vim键绑定完美融合到现代IDE中&#xff0c;让开发者能够在熟悉的开发环境中享受纯键盘操作的流畅体验。…

作者头像 李华
网站建设 2026/3/18 20:10:03

Pyxel编辑器完全指南:从像素艺术新手到复古游戏开发高手

Pyxel编辑器完全指南&#xff1a;从像素艺术新手到复古游戏开发高手 【免费下载链接】pyxel A retro game engine for Python 项目地址: https://gitcode.com/gh_mirrors/py/pyxel 你是否曾经梦想过创作自己的复古游戏&#xff0c;却因为复杂的工具链和技术门槛而望而却…

作者头像 李华
网站建设 2026/3/28 16:19:43

Linux信号处理终极指南:快速掌握进程通信实用技巧

你是否曾经遇到过这样的场景&#xff1a;一个程序突然卡死&#xff0c;需要强制终止&#xff1b;或者多个程序需要相互通知重要事件&#xff1f;这些正是Linux信号处理技术大显身手的地方&#xff01;信号就像是程序之间的"紧急电话"&#xff0c;能够快速传递重要信息…

作者头像 李华
网站建设 2026/3/11 7:58:11

Qwen3-4B-FP8模型:从零开始的AI伙伴部署实战

Qwen3-4B-FP8模型&#xff1a;从零开始的AI伙伴部署实战 【免费下载链接】Qwen3-4B-Instruct-2507-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-4B-Instruct-2507-FP8 还在为复杂的AI模型部署头疼吗&#xff1f;别担心&#xff0c;今天我们就来聊聊如…

作者头像 李华
网站建设 2026/3/26 13:24:01

腾讯HunyuanVideo:重塑开源视频生成的技术格局

腾讯HunyuanVideo&#xff1a;重塑开源视频生成的技术格局 【免费下载链接】HunyuanVideo 项目地址: https://ai.gitcode.com/hf_mirrors/tencent/HunyuanVideo 在视频生成技术快速演进的时代&#xff0c;开源模型正成为推动行业创新的关键力量。腾讯混元最新发布的Hun…

作者头像 李华