惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
S
Securelist
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
量子位
博客园 - Franky
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
T
Troy Hunt's Blog
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
小众软件
小众软件
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
L
Lohrmann on Cybersecurity
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
博客园_首页
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
T
Tenable Blog

博客园 - GoGrid

企业级详述:ArkTS 尾随闭包(Trailing Closure) 企业级视角下的 ArkTS 深度解析 企业级面向切面编程(AOP)详解 ArkTS 与 ArkUI 详述 ArkUI框架px2vp等单位转换API修正示例与速查手册 HarmonyOS单位转换API迁移指南与最佳实践 鸿蒙ohos前缀命名规范与资源体系详解 HarmonyOS Toast弹窗企业级开发规范与最佳实践 ArkUI Stage模型企业级实用教程 企业级鸿蒙HAP开发指南 HarmonyOS LazyForEach企业级开发规范与实战指南 ArkTS LazyForEach 企业级技术详解与最佳实践 ArkTS ForEach 企业级技术规范与最佳实践 ArkTS $与this关键字企业级技术详解 ArkUI 企业级开发实用教程 DevEco Studio 中文支持与路径配置指南 ArkTS V1 与 V2 装饰器映射关系企业级参考文档 ArkTS @ComponentV2 与 @Component 企业级对比技术文档 ArkTS 声明式开发企业级技术指南 ArkTS struct 企业级技术规范文档 ArkTS 对象字面量企业级技术规范文档 DevEco Studio 预览功能使用指南 ArkTS中.ets后缀含义说明
ArkTS @Prop 装饰器技术说明文档
GoGrid · 2026-04-07 · via 博客园 - GoGrid

ArkTS @Prop 装饰器技术说明文档

本文档详细介绍 ArkTS 中 @Prop 装饰器的定义、核心特性、使用场景及最佳实践,同时说明其词源背景,帮助开发者准确理解和使用该装饰器实现组件间的数据传递。

一、@Prop 基本概述

@Prop  ArkUI 框架提供的状态管理装饰器,用于实现父组件到子组件的**单向数据传递**,是组件化开发中实现状态分层管理的核心工具之一。通过 @Prop 装饰的变量可以接收父组件传递的数据,并在父组件数据更新时自动同步到子组件。

词源说明

Prop 源自英文单词 Property,意为“属性”,是前端组件化开发领域的通用术语,指代父组件传递给子组件的配置属性。这一命名规范在 React、Vue 等主流前端框架中均有沿用,已成为行业通用标准。

二、核心特性与工作机制

1. 单向数据流规则

@Prop 严格遵循单向数据流设计原则:

• 数据仅能从父组件流向子组件,子组件对 @Prop 变量的修改不会回传给父组件

• 子组件内部的修改仅作用于当前组件及其后代组件,不会影响父组件的原始状态

• 当父组件的源数据发生变化时,子组件的 @Prop 变量会自动同步更新,覆盖子组件的本地修改

2. 数据类型支持

@Prop 支持多种数据类型的传递:

• 基本数据类型:number、string、boolean、undefined、null

• 复杂数据类型:Object、Array、Date 等引用类型

• 注意:传递引用类型时默认执行值拷贝,子组件修改对象属性不会影响父组件的原始对象

3. 生命周期与更新机制

• 初始化阶段:子组件创建时,@Prop 变量会继承父组件传递的初始值

• 更新阶段:父组件的源数据发生变化时,子组件的 @Prop 变量会自动同步更新,触发子组件 UI 刷新

• 本地修改:子组件可以修改 @Prop 变量,但该修改仅在当前组件层级生效,不会向上传递

三、典型使用场景

@Prop 适用于以下开发场景:

1. 展示型组件:子组件仅需展示父组件传递的数据,不需要修改源数据,如列表项、卡片组件、信息展示面板等

2. 复用型组件:需要在多个场景下复用的通用组件,通过 @Prop 接收不同的配置参数,提高组件的通用性

3. 状态分层管理:多层级组件嵌套场景下,将状态管理集中在父组件,子组件仅负责展示和局部交互,避免状态污染

4. 性能优化:通过单向数据流减少状态变更的影响范围,降低不必要的组件重渲染

四、代码示例

以下示例展示了父组件向子组件传递数据的典型用法:

// 父组件
@Component
struct ParentComponent {
  @State parentName: string = "ArkTS"
  @State parentAge: number = 3

  build() {
    Column() {
      Text(`父组件:${this.parentName},版本 ${this.parentAge}`)
        .fontSize(18)
        .onClick(() => {
          this.parentAge += 1 // 父组件修改状态,会同步到子组件的 @Prop 变量
        })

            // 向子组件传递数据
      ChildComponent({
        childName: this.parentName,
        childAge: this.parentAge
      })
    }
    .padding(20)
  }
}

// 子组件
@Component
struct ChildComponent {
  @Prop childName: string
  @Prop childAge: number

  build() {
    Column() {
      Text(`子组件:${this.childName},版本 ${this.childAge}`)
        .fontSize(16)
        .margin({ top: 20 })
        .onClick(() => {
          this.childAge += 1 // 子组件修改仅作用于当前组件,不会影响父组件
        })
    }
  }
}

注意事项

如果需要实现父子组件的双向数据同步,应使用 @Link 装饰器而非 @Prop。@Link 装饰的变量与父组件状态共享同一份内存地址,修改会双向同步。

五、@Prop 与其他装饰器对比

装饰器

数据流向

修改影响范围

适用场景

@State

组件内部私有

仅当前组件

组件内部状态管理

@Prop

→子单向

子组件及其后代

单向数据传递、展示型组件

@Link

父子双向

父子组件同步

双向数据绑定、表单组件

@Provide/@Consume

跨层级传递

所有消费组件

多层级组件状态共享

六、最佳实践

• 优先使用 @Prop 实现单向数据传递,仅在确实需要双向同步时才使用 @Link,降低状态管理复杂度

• 对于不需要修改的纯展示参数,建议使用 @Prop 而非直接传递普通变量,享受自动更新能力

• 避免在 @Prop 变量上执行频繁的修改操作,如需大量本地修改,建议在子组件内部创建 @State 变量承接初始值

• 传递复杂对象时,如需子组件修改影响父组件,应配合 @Observed  @ObjectLink 装饰器使用

文档版本:V1.0 | 更新日期:2024年4月