这份表按「使用频率 + 功能」分类,附直接可复制的代码模板,覆盖你项目里 99% 的场景。
一、组件 / 页面基础定义(必用)
1.1 @Component
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Component |
标记 struct 为可复用自定义组件,必须搭配 build() | 封装通用按钮、卡片、列表项 |
使用案例
@Component
struct MyButton {
build () {
Button ("确认").width (100)
}
}
1.2 @Entry
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Entry |
标记为页面入口,每个页面只能有1个 | 页面根组件,搭配 @Component
|
使用案例
@Entry
@Component
struct NearLinkPage {
build() { Column() { Text("页面") } }
}
1.3 @CustomDialog
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@CustomDialog |
标记为自定义弹窗,配合 CustomDialogController 控制 |
带输入框、自定义布局的弹窗 |
使用案例
@CustomDialog
struct MyDialog {
controller: CustomDialogController
build() { Column() { Text("弹窗") } }
}
二、状态管理(你当前最常用,按场景排序)
2.1 @State
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@State |
组件内私有响应式状态,修改后自动刷新UI | 开关状态、计数器、页面本地状态 |
使用案例
// 定义nearLinkFlag
@State nearLinkFlag: boolean = false;
// 修改后自动刷新Text
this.nearLinkFlag = true;
2.2 @Watch
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Watch |
监听状态变化,触发回调(类似Vue的watch) | 监听NearLink状态变化、表单输入校验 |
使用案例
@State nearLinkState: number = 0;
@Watch('nearLinkState')
onStateChange() {
if (this.nearLinkState === 2) {
AlertDialog.show({ title: "已连接" })
}
}
2.3 @Prop
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Prop |
父子单向绑定(父改子更,子不能改父) | 父组件向子组件传递配置/状态 |
使用案例
// 子组件
@Component
struct Child {
@Prop title: string; // 单向接收
}
// 父组件
Child({ title: "NearLink设置" })
2.4 @Link
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Link |
父子双向绑定(父子互相修改同步) | 子组件修改父组件的开关、输入框 |
使用案例
// 子组件
@Component
struct Child {
@Link switchState: boolean;
}
// 父组件(必须用$传递)
Child({ switchState: $this.nearLinkFlag })
2.5 @Provide / @Consume
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Provide / @Consume
|
跨层级共享状态(祖先→任意后代,无需逐层传参) | 全局主题、用户信息、NearLink全局状态 |
使用案例
// 祖先组件
@Provide nearLinkGlobalState: boolean = false;
// 任意后代组件
@Consume nearLinkGlobalState: boolean;
2.6 @Observed + @ObjectLink
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Observed + @ObjectLink
|
对象/数组响应式(监听对象内部属性变化) | 复杂对象状态(如设备列表、配置对象) |
使用案例
// 1. 标记对象为可观察
@Observed
class NearLinkDevice {
name: string = "";
connected: boolean = false;
}
// 2. 子组件接收
@Component
struct DeviceItem {
@ObjectLink device: NearLinkDevice;
}
三、UI 复用与样式(提升开发效率)
3.1 @Builder
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Builder |
封装重复UI片段,可在build中直接调用 | 重复的标题栏、按钮组、状态文本 |
使用案例
@Builder
StatusText(flag: boolean) {
Text(flag ? "已开启" : "已关闭")
.fontColor(flag ? "#0088ff" : "#ff0000")
}
// 使用:直接在build里调用
this.StatusText(this.nearLinkFlag)
3.2 @Styles
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Styles |
封装可复用样式集合,一次写多处用 | 通用按钮样式、文本样式 |
使用案例
@Styles
commonButton() {
.width(120)
.height(44)
.borderRadius(8)
.backgroundColor("#0088ff")
}
// 使用:直接链式调用
Button("确认").commonButton()
3.3 @Styles
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@BuilderParam |
组件插槽,父组件向子组件传递自定义UI | 通用卡片、弹窗的自定义内容区域 |
使用案例
// 子组件
@Component
struct Card {
@BuilderParam content: () => void;
build() { Column() { this.content() } }
}
// 父组件使用
Card() {
Text("自定义内容").fontSize(20)
}
3.4 @Extend
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Extend |
扩展原生组件,添加默认样式/事件 | 给Button/Text加全局默认样式 |
使用案例
@Extend(Button)
function primaryBtn() {
.width(100)
.backgroundColor("#0088ff")
}
// 使用:直接调用扩展方法
Button("提交").primaryBtn()
四、全局/页面级存储(跨组件共享数据)
4.1 @StorageLink
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@StorageLink |
全局App级可读写存储(多页面共享) | 全局配置、用户偏好设置 |
使用案例
// 全局存储,读写
@StorageLink('isDarkMode') isDark: boolean = false;
// 修改后所有使用该key的组件同步更新
this.isDark = true;
4.2 @StorageProp
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@StorageProp |
全局App级只读存储(只能读,不能改) | 全局常量、系统配置 |
使用案例
@StorageProp('appVersion') version: string = "1.0.0";
4.3 @LocalStorageLink
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@LocalStorageLink |
当前页面级可读写存储(同页面多组件共享) | 页面内多组件共享的临时状态 |
使用案例
// 页面根组件初始化
let pageStorage: LocalStorage = new LocalStorage();
// 页面内组件
@LocalStorageLink('pageState') pageState: number = 0;
五、其他高频辅助装饰器
5.1 @Preview
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Preview |
DevEco Studio 中预览组件/页面 | 开发时实时预览效果 |
使用案例
@Preview
@Entry
@Component
struct IndexPage { ... }
5.2 @Reusable
| 修饰词 | 核心作用 | 典型场景 |
|---|---|---|
@Reusable |
标记组件为可复用,提升长列表性能 | List/Grid中的列表项组件 |
使用案例
@Reusable
@Component
struct ListItem { ... }
总结
快速选型指南(帮你选对装饰器)
-
组件内用:优先
@State+@Watch -
父子传值:只读用
@Prop,需要双向修改用@Link -
跨多层组件共享:用
@Provide/@Consume -
对象/数组状态:用
@Observed+@ObjectLink -
重复UI/样式:用
@Builder/@Styles