HarmonyOS6 组件复用 reuseId 官方使用文档

HarmonyOS6 组件复用 reuseId 官方使用文档

文章目录

本文档基于 HarmonyOS 官方 reuseId 通用属性规范编写,配套可直接运行、无语法报错的完整示例,适用于 API 12+ 稳定版 DevEco Studio,严格遵循 ArkTS 语法检查规则。

reuseId 是 HarmonyOS ArkUI 提供的组件复用标识通用属性,用于为 @Reusable 可复用组件设置唯一复用ID。
系统会根据 reuseId 匹配组件实例:相同ID直接复用缓存实例,不同ID则重建实例,大幅减少组件创建/销毁开销,提升页面渲染性能与流畅度。

配合组件复用生命周期 aboutToReuse,可实现复用时的数据更新,是长列表、动态组件切换、频繁显隐组件场景的核心性能优化方案。

一、核心 API 定义

1. reuseId 通用属性

reuseId(id:string):T
  • 作用:为可复用组件绑定唯一复用标识,控制实例复用逻辑
  • 参数:id - 字符串类型,自定义唯一标识
  • 返回值:组件自身实例,支持链式调用

2. 核心装饰器

@Reusable:标记组件为可复用组件,使用 reuseId必备前提

3. 组件复用生命周期

  1. aboutToAppear()
    组件首次创建、即将显示时触发,仅执行一次。
  2. aboutToReuse(params: Record<string, Object>)
    组件被复用时触发,用于接收参数并更新组件状态。
    • 参数类型:Record<string, Object>(ArkTS 官方强制类型)
    • 作用:复用实例时更新数据,替代重建逻辑

二、核心使用规则

  1. 仅支持 @Reusable 组件:系统组件无法使用 reuseId。
  2. ID 匹配规则:相同 reuseId → 复用实例;不同 reuseId → 重建实例。
  3. 组件缓存机制:组件隐藏后实例会被系统缓存,再次显示且ID匹配时直接复用。
  4. 数据更新:复用时必须在 aboutToReuse 中完成数据更新。
  5. 类型规范aboutToReuse 参数必须使用 Record<string, Object>,符合 ArkTS 严格语法。

三、完整可运行示例代码

// xxx.ets@Entry@Component struct ReuseIdFullDemo {@State isShow:boolean=true;@State currentTypeId:string='type_1';build(){Column({ space:20}){Text("组件复用 reuseId 完整示例").fontSize(22).fontWeight(FontWeight.Bold).margin({ top:30});Button("显示/隐藏组件").onClick(()=>{this.isShow =!this.isShow;}).width(260);Button("切换复用ID: "+this.currentTypeId).onClick(()=>{this.currentTypeId =this.currentTypeId ==='type_1'?'type_2':'type_1';}).width(260);if(this.isShow){ReusableItem({ typeText:this.currentTypeId }).reuseId(this.currentTypeId)}}.width('100%').height('100%').justifyContent(FlexAlign.Start).padding(20).backgroundColor('#f8f8f8');}}// ==============================================// 可复用组件(完全符合官方类型定义)// ==============================================@Reusable@Component struct ReusableItem { typeText:string='';@State count:number=0;aboutToAppear(){console.info(`【组件创建】aboutToAppear -> type: ${this.typeText}`);}// 官方要求的固定类型:Record<string, Object>aboutToReuse(params: Record<string, Object>){// 安全取值,完全符合类型检查const newType = params.typeText asstring;console.info(`【组件复用】aboutToReuse -> 旧type: ${this.typeText},新type: ${newType}`);// 更新数据this.typeText = newType;this.count++;}build(){Row(){Text(`当前类型:${this.typeText}`).fontSize(20).fontWeight(FontWeight.Medium);Text(`复用次数:${this.count}`).fontSize(18).margin({ left:20}).fontColor(Color.Blue);}.width('90%').height(60).backgroundColor('#ffffff').justifyContent(FlexAlign.Center).borderRadius(12).margin({ top:20});}}

运行效果如图:


点击按钮 显示/隐藏组件 如下图

四、示例执行流程与日志说明

1. 页面初始化

  • switch = true,渲染 ReusableItem 组件
  • reuseId = type_1,组件首次创建
  • 输出日志:【组件创建】aboutToAppear -> type: type_1

2. 点击「显示/隐藏组件」

  • 第一次点击:组件隐藏,实例被系统缓存
  • 第二次点击:组件重新显示,匹配缓存ID,直接复用实例
  • 输出日志:【组件复用】aboutToReuse -> 旧type: type_1,新type: type_1
  • 复用次数 +1

3. 点击「切换复用ID」

  • currentTypeId 切换为 type_2
  • reuseId 变更,组件销毁重建
  • 输出日志:【组件创建】aboutToAppear -> type: type_2

4. 再次切换回原ID

  • 匹配缓存的 type_1 实例,直接复用
  • 输出日志:【组件复用】aboutToReuse -> 旧type: type_2,新type: type_1

总结

reuseId 是 HarmonyOS 官方推荐的组件复用核心方案,通过唯一ID实现组件实例缓存与复用,配合 @ReusableaboutToReuse 可大幅降低 UI 渲染开销。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力!

Read more

宇树机器人g1二次开发:建图,定位,导航手把手教程(二)建图部分:开始一直到打开rviz教程

注意: 本教程为ros1,需要ubuntu20.04,使用算法为fase_lio 本教程为遵循的网上开源项目:https://github.com/deepglint/FAST_LIO_LOCALIZATION_HUMANOID.git 一、系统环境准备 1.1. 安装必要的依赖库 # 安装C++标准库 sudo apt install libc++-dev libc++abi-dev # 安装Eigen3线性代数库 sudo apt-get install libeigen3-dev 库说明: * libc++-dev:C++标准库开发文件 * libeigen3-dev:线性代数库,用于矩阵运算和几何变换 * 这些是编译FAST-LIO和Open3D必需的数学和系统库 二、创建工作空间和准备 2.1. 创建定位工作空间 mkdir

By Ne0inhk
使用trae进行本地ai对话机器人的构建

使用trae进行本地ai对话机器人的构建

前言 在人工智能技术快速发展的今天,构建本地AI对话机器人已成为开发者和技术爱好者的热门选择。使用 trae可以高效地实现这一目标,确保数据隐私和响应速度。本文将详细介绍如何利用 Trae 搭建本地AI对话机器人,涵盖环境配置、模型加载、对话逻辑实现以及优化技巧,帮助读者从零开始构建一个功能完整的AI助手。 本地化AI对话机器人的优势在于完全离线运行,避免网络延迟和数据泄露风险,同时支持自定义训练模型以适应特定场景需求。无论是用于个人助理、客服系统,还是智能家居控制,Trae 都能提供灵活的解决方案。 获取api相关信息 打开蓝耘进行登录,如果你是新人的话需要进行注册操作,输入你相关的信息就能进行注册成功 在平台顶部导航栏可以看到Maas平台,点击进入模型广场 来到模型广场可以看到很多的ai模型,比如就有我们的kimi k2模型 点击进去可以看到kimi k2模型的相关信息,我们将模型的id进行复制,等会儿我们是要用到的 /maas/kimi/Kimi-K2-Instruct 并且这里还具有在线体验的功能,生成回答速度快 https://archive.

By Ne0inhk

75元!复刻Moji 2.0 小智 AI 桌面机器人,基于乐鑫ESP32开发板,内置DeepSeek、Qwen大模型

文末联系小编,获取项目源码 Moji 2.0 是一个栖息在你桌面上的“有灵魂的伴侣”,采用乐鑫 ESP32-C5开发板,配置 1.5寸 360x360 高清屏,FPC 插接方式,支持 5G Wi-Fi 6 极速连接,内置小智 AI 2.0 系统,主要充当智能电子宠物的角色,在你工作学习枯燥时,通过圆形屏幕上的动态表情包卖萌解压,提供情绪陪伴;同时它也是功能强大的AI 语音助手,支持像真人一样流畅的连续对话,随时为你查询天气、解答疑惑或闲聊解闷,非常适合作为极客桌搭或嵌入式学习的开源平台。 🛠️ 装配进化 告别手焊屏幕的噩梦。全新设计的 FPC 插座连接,排线一插即锁,将复刻门槛降至最低。 🚀 性能进化 主控升级为 ESP32-C5。支持 5GHz Wi-Fi 6,

By Ne0inhk

SDIO 控制器介绍及使用场景

什么是 SDIO 控制器? SDIO 控制器(Secure Digital Input Output Controller),它是嵌入式系统中非常重要的一个模块,用于通过 SD 接口连接各种 非存储类外设(如 Wi-Fi 模块、蓝牙模块、FPGA、自定义从设备等)。 * 是一种扩展的 SD 主机控制器(SD Host Controller)。 * 支持 SDIO 协议标准,可以与支持 SDIO 的从设备进行数据通信。 * 属于 SD 协议的一部分,但面向的是 外设设备通信,而非存储。 * 通信采用 命令(CMD)+ 数据(DAT0~DAT3)+ 时钟(CLK)。 * 支持 中断、寄存器访问、

By Ne0inhk