ArkTs的UI装饰器(自定义组件生命周期、页面组件生命周期、所有UI装饰器使用及示例)

目录

自定义组件定义

UI装饰器

@Component(V1)

自定义组件生命周期

freezeWhenInactive11+

@Entry(通用)

页面组件生命周期

EntryOptions10+

Component、Entry示例

@Reusable(V1)

@Builder(通用)

@BuilderParam(通用)

参数

 引用传递示例

this指向

尾随闭包

@LocalBuilder(通用)

this指向示例 

@Styles(通用)

@Extend(通用)

@AnimatableExtend(通用)

可/不可动画属性

AnimatableArithmetic

 @Require(通用)


自定义组件定义

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。

自定义组件可以通过@Component或@ComponentV2装饰器去定义,两种的区别在于一个是早期的版本,一个新推出的版本。他们搭配使用的UI装饰器和状态管理装饰器不同,两种不能混用。如下:

@Component搭配V1版本的状态管理装饰器(@Reusabel、@State、@Prop、@Link等)使用。

@ComponentV2搭配V2版本的状态管理装饰器(@Local、@Param等)使用。

这里我们只介绍@Component,@ComponentV2在V2状态管理中介绍。

下面标题中装饰器后面的V1代表搭配@Component使用,V2代表搭配@ComponentV2使用。通用表示都可以使用。

UI装饰器

@Component(V1)

@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。@Component可以接受一个可选的bool类型参数,用来冻结自定义组件(冻结的组件不会随@state变量更新变化UI)。

自定义组件生命周期

被@Component装饰的自定义组件系统会提供以下生命周期:

  1. aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

  2. onDidBuild:组件build()函数执行完成之后回调该接口,开发者可以在这个阶段进行埋点数据上报等不影响实际UI的功能。不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。

  3. aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

freezeWhenInactive11+

组件冻结选项。

名称 类型 必填 说明
freezeWhenInactive bool 是否开启组件冻结。

@Component({ freezeWhenInactive: true })
struct MyComponent {
    aboutToAppear(){},
    onDidBuild(){},
    aboutToDisappear(){},
    build(){
        //这里写UI部分
    }
}

@Entry(通用)

修饰@Component定义的自定义组件,将其作为入口组件(页面组件)。

入口组件:可以作为页面路由单独显示的,可以理解为一个完整的页面,无@Entry修饰的自定义组件只是部分页面,应用只能显示完整的页面,可以通过windowStage.loadContent方法决定挂载哪一个完整页面。

页面组件生命周期

被@Entry装饰的页面组件系统会提供以下生命周期:

  1. onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

  2. onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。

  3. onBackPress:当用户点击返回按钮时触发。

@Entry可以接受一个可选的LocalStorage的参数或者一个可选的EntryOptions参数。入参见

EntryOptions10+

命名路由跳转选项。

名称 类型 必填 说明
routeName string 表示作为命名路由页面的名字。
storage LocalStorage 页面级的UI状态存储。
useSharedStorage12+ boolean 是否使用LocalStorage.getShared()接口返回的LocalStorage实例对象,默认值false。

说明

当useSharedStorage设置为true,并且storage也被赋值时,useSharedStorage的值优先级更高

@Entry({ routeName : 'myPage' })
@Component
struct MyComponent {
}

Component、Entry示例


内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
### ArkTS UI 组件库概述 ArkUI 是专为 ArkTS 设计的 UI 组件库,旨在简化应用程序界面开发过程。此组件库提供了一系列预定义的布局模式和交互控件,使开发者能够快速搭建既美观又功能丰富的用户界面[^1]。 #### 主要特性 - **多样的布局支持**:除了常见的线性排列外,还特别强调了诸如 `StackContainer` 这类可以实现层叠效果的强大容器组件。这种设计允许在同一区域内重叠放置多个视图,并可通过调整各子项之间的相对顺序来控制其显示层次[^3]。 - **增强型插槽机制**:借助于 @BuilderParam 装饰器的支持,使得自定义组件更加灵活多样。它不仅限定了特定类型的输入参数,同时也赋予了这些参数更广泛的应用范围——类似于 HTML `<slot>` 的概念,在保持结构清晰的同时增加了内容填充上的弹性[^2]。 - **便捷的导航配置**:对于应用内页面间的切换操作,可以通过简单的 API 设置底部标签栏的位置和其他样式选项,从而满足不同应用场景下的需求[Tabs({ barPosition: BarPosition.End })][^4]。 - **高效的节点管理**:当涉及到复杂场景时,比如动态加载外部模块或是跨平台移植现有项目,则需注意某些特殊函数(如 OH_ArkUI_GetNodeHandleFromNapiValue)仅适用于指定用途;不当使用可能导致程序异常终止或行为不符合预期[^5]。 ```typescript // 示例代码片段展示如何利用上述提到的功能创建一个具有三层叠加文本框以及带底边栏的应用窗口 import { StackContainer, StackItem } from 'arkui'; import Tabs from '@ohos/arkui-tabs'; function createAppWindow() { return ( <StackContainer style={{ height: "100%" }}> {/* 定义三个不同的层级 */} <StackItem level={1}><Text>底层</Text></StackItem> <StackItem level={2}><Text>间层</Text></StackItem> <StackItem level={3}><Text>顶层</Text></StackItem> {/* 添加位于屏幕下方的Tab栏 */} <Tabs barPosition="End"> // Tab页签的具体内容... </Tabs> </StackContainer> ); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值