鸿蒙装饰器总结
在鸿蒙(HarmonyOS)的ArkUI框架中,除了常见的 @Component、@Entry、@State 装饰器外,还有许多其他装饰器,它们用于不同的场景和功能。以下是主要的装饰器及其含义:
1. 组件相关装饰器
-
@Component
标记一个结构为自定义组件,组件必须用此装饰器修饰才能参与页面布局和渲染。 -
@Entry
标记当前组件为页面的入口组件(即页面的根组件),一个页面必须有且仅有一个@Entry组件。
2. 状态管理装饰器
-
@State
声明组件的内部状态变量,状态变化会自动触发UI更新。@State count: number = 0; -
@Prop
声明从父组件传递的单向绑定变量,子组件不能直接修改它,只能通过父组件更新。@Prop message: string; -
@Link
声明与父组件的双向绑定变量,子组件的修改会同步到父组件。@Link isSelected: boolean; -
@Provide和@Consume
实现跨组件层级的数据共享(祖先组件提供数据,后代组件消费数据)。// 祖先组件 @Provide("theme") theme: string = "light"; // 后代组件 @Consume("theme") theme: string; -
@Observed和@ObjectLink
用于观察对象内部属性的变化(通常配合类使用)。@Observed class User { name: string; } @Component struct Child { @ObjectLink user: User; // 绑定对象的属性变化 } -
@Watch
监听状态变量的变化,触发回调函数。@State @Watch("onCountChange") count: number = 0; onCountChange() { ... }
3. UI 布局与样式装饰器
-
@Builder
定义可复用的UI片段(类似函数式组件)。@Builder MyButton() { Button("Click") } -
@Styles
定义可复用的样式集合(类似于CSS的类)。@Styles commonStyle() { .width(100).height(50) } -
@Extend
扩展原生组件的样式,支持动态逻辑。@Extend(Text) function boldText() { .fontWeight(FontWeight.Bold) }
4. 生命周期装饰器
-
@AboutToAppear
组件即将显示时触发的回调(类似onReady)。@AboutToAppear onAboutToAppear() { ... } -
@AboutToDisappear
组件即将销毁时触发的回调(类似onDestroy)。@AboutToDisappear onAboutToDisappear() { ... }
5. 其他装饰器
-
@StorageLink和@StorageProp
与应用持久化存储(AppStorage)双向或单向绑定。@StorageLink("username") username: string; // 双向绑定 @StorageProp("language") language: string; // 单向绑定 -
@LocalStorageLink和@LocalStorageProp
与页面级存储(LocalStorage)绑定,作用域小于AppStorage。
关键区别总结
| 装饰器 | 作用范围 | 数据流向 | 典型用途 |
|---|---|---|---|
@State |
组件内部 | 内部可变 | 组件私有状态 |
@Prop |
父→子 | 单向 | 父组件传递不可变数据 |
@Link |
父↔子 | 双向 | 父子组件同步数据 |
@Provide/@Consume |
跨层级 | 单向/双向 | 祖先-后代数据共享 |
@StorageLink |
全局存储 | 双向 | 持久化数据同步 |
示例代码片段
@Component
struct ParentComponent {
@State parentCount: number = 0;
build() {
Column() {
// 单向传递
ChildComponent({ childProp: this.parentCount })
// 双向绑定
ChildComponent({ childLink: $parentCount })
}
}
}
@Component
struct ChildComponent {
@Prop childProp: number; // 单向
@Link childLink: number; // 双向
build() {
Button(`Click ${this.childProp}`)
.onClick(() => {
this.childLink++; // 双向绑定可修改父组件状态
})
}
}
这些装饰器是鸿蒙ArkUI开发的核心,合理使用可以高效管理状态、组件通信和UI渲染。建议结合官方文档和实际场景练习。
更多推荐



所有评论(0)