鸿蒙 ArkTS 高频装饰器速查表(含场景 + 代码模板)[2026-06-07]

这份表按「使用频率 + 功能」分类,附直接可复制的代码模板,覆盖你项目里 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 { ... }

总结

快速选型指南(帮你选对装饰器)

  1. 组件内用:优先 @State + @Watch
  2. 父子传值:只读用 @Prop,需要双向修改用 @Link
  3. 跨多层组件共享:用 @Provide / @Consume
  4. 对象/数组状态:用 @Observed + @ObjectLink
  5. 重复UI/样式:用 @Builder / @Styles
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容