鸿蒙 核心与非核心装饰器

HarmonyOS NEXT 版本中完整的 ArkTS 装饰器分类整理(含核心与非核心装饰器,已剔除废弃特性)


一、核心装饰器(Essential Decorators)

1. 组件基础
装饰器功能
@Entry应用入口组件,每个模块必须且仅有一个,承载视图层级根节点
@Component自定义组件声明,支持结构化UI开发(必须与struct配合使用)
@BuilderUI片段复用,定义可复用UI构建函数(非完整组件)
2. 状态管理
装饰器数据流向特性
@State组件内部维护私有状态驱动UI更新,支持本地初始化
@Prop父 → 子单向同步接收父组件数据,本地修改不影响源头
@Link父 ↔ 子双向同步自动双向绑定父组件的@State变量
@ObjectLink复杂对象双向同步配合@Observed实现嵌套对象属性级响应式更新
@Observed对象可观察化标记类为可观察对象(必须与@ObjectLink@Prop配合使用)
3. 生命周期
装饰器触发时机
@OnPageShow页面显示(如返回栈恢复)
@OnPageHide页面隐藏(如跳转至其他页面)
@OnBackPress物理返回键/导航栏返回按钮事件监听(可拦截默认行为)

二、进阶装饰器(Advanced Decorators)

1. 性能优化
装饰器用途
@Reusable组件实例复用(类似Android RecyclerView回收池机制),减少重复渲染
@Track精细化属性追踪,深度监听复杂对象属性变化(优化渲染性能)
2. 状态共享
装饰器作用层级特性
@Provide / @Consume跨层级共享实现祖先与后代组件间的状态透传(无需逐层传递props)
@StorageLink全局持久化存储(AppStorage)双向绑定应用级共享状态
@StorageProp全局持久化存储(AppStorage)单向绑定应用级共享状态(仅读取)
@LocalStorageLink页面级临时存储双向绑定页面栈内状态
@LocalStorageProp页面级临时存储单向绑定页面栈内状态(仅读取)
3. 动画与样式
装饰器用途
@Animatable声明式动画支持,配合animateTo实现属性过渡动画
@Styles样式复用,定义组件通用样式集合(支持条件样式)
@Extend样式扩展,为现有组件添加自定义样式能力
4. 异步与监听
装饰器用途
@Watch状态变化监听,在指定变量变化时触发回调函数
@Concurrent并发函数标记,允许函数在TaskPool线程池中执行(需配合taskpoolAPI)

三、使用原则与建议

  1. 优先核心装饰器:90%的场景可通过@State@Prop@Link解决状态管理问题
  2. 谨慎使用深度监听@Track过度使用会导致内存开销增加
  3. 全局状态选择
    • 持久化数据用AppStorage系列装饰器
    • 页面级临时数据用LocalStorage系列装饰器
  4. 线程安全@Concurrent装饰的函数需确保无UI操作(遵守ArkTS线程模型)
  5. 生命周期对齐:页面级装饰器(如@OnPageShow)仅在@Entry组件生效

四、完整对比速查表

分类核心装饰器进阶装饰器
组件基础@Entry, @Component, @Builder-
状态管理@State, @Prop, @Link, @Observed@Provide/Consume, Storage/LocalStorage系列
性能优化-@Reusable, @Track
动画样式-@Animatable, @Styles, @Extend
异步监听-@Watch, @Concurrent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot之Web服务器的启动流程分析

如何判断创建哪种web容器:servlet?reactive? 我们在启动Spring Boot程序的时候,会使用SpringApplication.run方法来启动,在启动流程中首先要判断的就是需要启动什么类型的服务器,是servlet?或者…

影刀RPA开发-采集爬取京东读书书籍

1.采集京东读书 我们先梳理下操作流程 首先,在首页输入要爬取的书籍名称,输入后,搜索 出现搜索结果后,会有很多版本的书籍 我们点击热门筛选,让书记排序,这样可以将最符合我们需求的书籍显示在第一位 点击…

VScode 的插件本地更改后怎么生效

首先 vscode 的插件安装地址为 C:\Users\%USERNAME%\.vscode\extensions 找到你的插件包进行更改 想要打印日志,用下面方法 vscode.window.showErrorMessage(console.log "${name}" exists.); 打印结果 找到插件,点击卸载 然后点击重新启动 …

前端项目2-01:个人简介页面

目录 一.代码显示 二.效果图 三.代码分析 1. 文档声明和 HTML 基本结构 2. CSS 样式部分 全局样式 body 样式 页面主要容器 box 样式 左侧区域 l 样式 右侧区域 r 样式 左侧区域中头像容器 to 样式 头像图片样式及悬停效果 左侧区域中个人信息容器 tit 样式 个人…

针对面试-mysql篇

1.如何定位慢查询? 1.1.介绍一下当时产生问题的场景(我们当时的接口测试的时候非常的慢,压测的结果大概5秒钟)),可以监测出哪个接口,最终因为是sql的问题 1.2.我们系统中当时采用了运维工具(Skywalkin就是2秒,一旦sql执行超过2秒…

无偿帮写毕业论文

以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行,脱产学习这么多年,终于熬出头了,完成毕设后有空就去多看看亲人好友,祝好! 一、找一个论文模板(最好是overleaf) 废话不多说&#…

Spring MVC 根据请求头 (如 Accept) 怎么返回 JSON 或 XML 数据?

Spring MVC 通过 内容协商 (Content Negotiation) 来根据客户端请求的 Accept 头决定返回 JSON、XML 还是其他格式的数据。 以下是核心机制和步骤: 客户端请求中的 Accept 头: 客户端(如浏览器、curl、Postman等)在发起HTTP请求时&#xff0…

Java 线程的堆栈跟踪信息

Java 线程的堆栈跟踪信息,展示了线程的当前状态和执行位置。以下是详细解释: 线程基本信息 "Thread-0" #16 prio5 os_prio0 cpu0.00ms elapsed16.29s tid0x00000243105a4130 nid0x5384 waiting on condition [0x0000007687ffe000]线程名称…

机器学习管道 pipeline

知识回顾: 转化器和估计器的概念管道工程ColumnTransformer和Pipeline类 作业: 整理下全部逻辑的先后顺序,看看能不能制作出适合所有机器学习的通用pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”,也可以翻译为“流水线”&…

硬件工程师笔记——电子器件汇总大全

目录 1、电阻 工作原理 欧姆定律 电阻的物理本质 一、限制电流 二、分压作用 三、消耗电能(将电能转化为热能) 2、压敏电阻 伏安特性 1. 过压保护 2. 电压调节 3. 浪涌吸收 4. 消噪与消火花 5. 高频应用 3、电容 工作原理 (…

【React中useRef钩子详解】

一、useRef的核心特性 useRef是React提供的Hook,用于在函数组件中创建可变的持久化引用,具有以下核心特性: 持久化存储 返回的ref对象在组件整个生命周期内保持不变,即使组件重新渲染,current属性的值也不会丢失。无触发渲染 修改ref.current的值不会导致组件重新渲染,适…

在 C++中,指针数组与数组指针的区别

1. 指针数组:本质上是一个数组,数组中的每个元素都是一个指针。也就是说,这个数组存储的是多个指针变量,这些指针可以指向不同的对象(比如不同的变量、数组等) 。 2. 数组指针:本质上是一个指针,这个指针指向一个数组。即它指向的是数组的首地址,通过这个指针可以操作…