【OpenHarmony】详解UI组件装饰器(必看)
2023-09-14 09:14:31 时间
目录
1、基础UI组件结构
每个UI组件需要定义为@Component struct对象。
其内部必须包含一个且只能包含一个build(){}函数,用于绘制UI;
struct之内、build()函数之外的地方用于存放数据。
@Component struct SampleUIComponent { // data build() { // ui } }
2、基础ui装饰器
@Entry
装饰struct,页面的入口。
@Component
装饰struct,表示该struct具有基于组件的能力。
数据装饰器@State、@Prop、@Link
@State
当该数据被修改时,所在组件的build()方法会被重新调用,进而重绘所在的UI。该装饰器的作用范围仅限于其所在的UI内部。
@Prop
该组件继承了@State的基本功能,同时,又有两个新的特点:
1. 能被其父控件的@State变量初始化(假设为a)。
2. 与其父组件建立其单向联系:监其听父组件中的变量a,当a的值发生变化时,该@Prop也会同步变化,进而重绘其所在控件的UI。
@Link
与@Prop不同的是,@Link会与其父控件中对应的@State变化建立双向联系,即当子组件中的@Link对象的之发生变化时,其父组件中对应的@State变量也会随之变化,这个时候父子UI都会重绘。
三个装饰器的相同点
- 会引起ui重绘
- 内部私有
三个装饰器的不同点
3、@Provide、@Consume
顾名思义,这一对是形成生产者-消费者模式的装饰器,且双向绑定
@Provide必须设置初始值,@Consume不可设置默认初始值。
触发变化的时机:
- 基础类型(boolean,string,number)变量的改变;
- @Observed class类型变量及其属性的修改;
- 添加,删除,更新数组中的元素。
struct CompA {
@Provide("reviewVote") reviewVotes: number = 0;
}
struct CompC {
@Consume("reviewVote") reviewVotes: number
}
4、@Watch
使用观察者模式的装饰器,但该装饰器不是触发变量变化,而是绑定一个函数,当@Watch变量变化时,调用该函数。
struct ComA {
// 绑定onBasketUpdate方法,当变量更新时调用
@State @Watch('onBasketUpdate') shopBasket: Array = [7, 12, 47, 3]
onBasketUpdate(propName: string): void {
this.updateTotal()
}
}
相关文章
- Vue之组件化(二)
- 微信小程序常用的组件
- 2套后台模板HTML+整套Easyui皮肤组件-后台管理系统模板
- Zabbix的组件及其工作原理
- 细说React组件性能优化
- 『前端工程』—— 封装第三方组件的三板斧
- vue父组件向子组件传值_vue什么是父子组件
- 第128期:Flutter的flex布局组件(row 和 column)
- 父组件给子组件传值
- C/C++ Qt 自定义Dialog对话框组件应用
- 全新的 React 组件设计理念 Headless UI
- 【愚公系列】2023年01月 Dapr分布式应用运行时-组件的定义
- 【鸿蒙 HarmonyOS】UI 组件 ( 多选按钮 | Checkbox 组件 )
- 【鸿蒙 HarmonyOS】UI 组件 ( 文本输入框 TextField 组件 )
- 【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )
- Layui 一套开源的 Web UI 组件库
- Cinder 组件详解 – 每天5分钟玩转 OpenStack(47)
- Log4net日志记录组件的使用步骤详解和下载