HarmonyOS @Provide/@Consume 跨组件通信
适用版本HarmonyOS 6.1API 12及以上验证环境Pura 90 Pro 模拟器HarmonyOS 6.1.1API 24关键概念Provide、Consume、跨层级状态共享、主题系统前言Prop和Link适合直接父子通信但当状态需要跨越多个层级祖父→孙子时层层传递Prop十分繁琐。Provide/Consume解决了这个问题祖先组件“提供“状态任意后代组件“消费“无需中间层显式传递。一、基本用法// 祖先组件根组件 Entry Component struct AppRoot { Provide themeColor: string #0066ff // 提供共享状态 Provide themeName: string 蓝色主题 build() { Column() { MiddleLayer() // 中间层 } } switchTheme(): void { this.themeColor #07C160 // 修改 Provide → 所有 Consume 自动刷新 this.themeName 绿色主题 } } // 中间层无需关心 themeColor不用传 Prop Component struct MiddleLayer { build() { Column() { ThemeDisplay() // 深层子组件 } } } // 深层子组件直接消费 Component struct ThemeDisplay { Consume themeColor: string // 变量名必须与 Provide 一致 Consume themeName: string build() { Row() { Text().width(40).height(40).borderRadius(20).backgroundColor(this.themeColor) Text(当前主题: ${this.themeName}) } } }二、Provide 别名当变量名可能冲突时用字符串指定别名// 祖先 Provide(primaryColor) mainColor: string #0066ff // 后代用别名消费本地变量名可以不同 Consume(primaryColor) localColor: string三、子组件中的 Consume 也可以修改状态Consume和Link一样是双向的——子组件修改Consume变量会同步回Provide所在的祖先组件Component struct ThemeButton { Consume themeColor: string // 双向 label: string onTap: () void () {} build() { Button(this.label) .backgroundColor(this.themeColor) // 响应主题色变化 .onClick(() { this.onTap() }) } }四、与 Prop/Link 对比特性PropLinkProvide/Consume数据流父→子单向父↔子双向祖先↔任意后代双向跨层级❌ 需逐层传递❌ 需逐层传递✅ 直接跨层中间层需传递需传递无需关心适用场景直接父子展示直接父子双向主题、语言、权限等全局状态五、实战主题切换系统Entry Component struct AppRoot { Provide themeColor: string #0066ff Provide themeName: string 蓝色主题 Provide clickCount: number 0 private themes: string[][] [ [#0066ff, 蓝色主题], [#07C160, 绿色主题], [#e74c3c, 红色主题], [#9b59b6, 紫色主题], ] private idx: number 0 switchTheme(): void { this.idx (this.idx 1) % this.themes.length this.themeColor this.themes[this.idx][0] this.themeName this.themes[this.idx][1] this.clickCount } build() { Column() { Button(切换主题).onClick(() { this.switchTheme() }) NavBar() // 导航栏自动刷新主题色 ContentArea() // 内容区自动刷新主题色 } } }模拟器运行截图初始状态蓝色主题切换主题后点击「切换主题」后根组件修改Provide themeColor所有Consume themeColor的子组件中间层预览条、深层子组件 ThemeDisplay同步刷新颜色。实测结果切换次数主题根/中间层/深层子组件颜色0蓝色主题#0066ff全部同步为蓝色1绿色主题#07C160全部同步为绿色2红色主题#e74c3c全部同步为红色3紫色主题#9b59b6全部同步为紫色常见问题QProvide 变量和 State 变量有什么区别AProvide在内部仍然是State额外的作用是“广播“给所有后代中的Consume。单纯的State不会向后代广播。Q两个 Provide 变量名相同会冲突吗A如果组件树中存在嵌套的同名Provide内层的Provide会遮蔽外层Consume会找到最近的祖先Provide。通常应避免同名冲突使用别名区分。QConsume 必须有初始值吗A不需要初始值与Link一样ArkUI 运行时会在组件挂载时从祖先的Provide注入值。如果找不到对应的Provide运行时会报错。上一篇状态管理State/Prop/Link/Watch下一篇动画与过渡效果

相关新闻

PHP专家成长指南:从语法到架构的进阶之路

PHP专家成长指南:从语法到架构的进阶之路

1. PHP专家的核心能力图谱十年前我刚接触PHP时,以为会写几个CRUD页面就是专家了,直到参与了一个日均百万PV的电商项目重构才明白,真正的PHP专家需要的是立体化的技术栈。这张能力图谱是我从初级到资深PHP开发者的成长路径总结:1.1…

2026/7/18 5:27:00 阅读更多 →
Anaconda环境管理:Python开发者的高效解决方案

Anaconda环境管理:Python开发者的高效解决方案

1. 为什么选择Anaconda管理Python环境在Python开发领域,环境管理一直是个令人头疼的问题。我经历过无数次"在我的机器上能运行"的尴尬场景,也遇到过不同项目依赖冲突导致的诡异bug。经过多年实践,我发现Anaconda是最适合解决这些问…

2026/7/18 5:27:00 阅读更多 →
Python键盘输入处理:从基础原理到跨平台实战应用

Python键盘输入处理:从基础原理到跨平台实战应用

在实际开发过程中,键盘输入处理是一个基础但容易出问题的环节。无论是桌面应用、Web 前端还是嵌入式设备,开发者都需要准确捕获用户的按键事件,并处理不同操作系统、浏览器或硬件带来的兼容性问题。本文将以 Python 为例,深入讲解…

2026/7/18 5:27:00 阅读更多 →

最新新闻

UE5动画曲线控制:Modify Curve节点五种Apply Mode详解与应用

UE5动画曲线控制:Modify Curve节点五种Apply Mode详解与应用

1. 项目概述:为什么Modify Curve节点值得深挖?在UE5的动画蓝图里,Modify Curve节点是个看似简单,实则藏着不少门道的工具。很多刚接触动画状态机或者想精细化控制动画曲线的朋友,可能只是用它来简单地开关某个曲线值&a…

2026/7/18 9:28:40 阅读更多 →
2.8万亿参数开源神作!Kimi K3 正式发布:48小时自主设计AI芯片,长程代码能力直逼克劳德寓言5?

2.8万亿参数开源神作!Kimi K3 正式发布:48小时自主设计AI芯片,长程代码能力直逼克劳德寓言5?

大模型开源社区迎来了一枚深水炸弹。月之暗面正式推出了其旗舰模型——**Kimi K3**。作为一款拥有 **2.8万亿参数** 规模的超大模型,它不仅刷新了全球开源模型的体量上限,更在学术界和工业界掀起了滔天巨浪,甚至连马斯克都在 X(原…

2026/7/18 9:28:40 阅读更多 →
SaveDesktop代码贡献实践:从问题报告到Pull Request的完整流程

SaveDesktop代码贡献实践:从问题报告到Pull Request的完整流程

SaveDesktop代码贡献实践:从问题报告到Pull Request的完整流程 【免费下载链接】SaveDesktop Save Desktop saves your Linux desktop environment configuration 项目地址: https://gitcode.com/gh_mirrors/sa/SaveDesktop SaveDesktop是一款专为Linux桌面环…

2026/7/18 9:28:40 阅读更多 →
CANN/asc-devkit浮点数转无符号整数函数

CANN/asc-devkit浮点数转无符号整数函数

__float2uint_rd 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcod…

2026/7/18 9:28:40 阅读更多 →
程序员数学突破指南:GitHub精选资源库助你夯实算法基础

程序员数学突破指南:GitHub精选资源库助你夯实算法基础

程序员数学突破指南:GitHub精选资源库助你夯实算法基础 【免费下载链接】pdfs Technically-oriented PDF Collection (Papers, Specs, Decks, Manuals, etc) 项目地址: https://gitcode.com/GitHub_Trending/pd/pdfs 作为一名程序员,你是否曾经在…

2026/7/18 9:28:40 阅读更多 →
Linux多核CPU占用率超100%的原理与监控技巧

Linux多核CPU占用率超100%的原理与监控技巧

1. 为什么你的CPU占用率会超过100%? 当你第一次在Linux服务器上运行top命令,看到某个进程的CPU占用率显示为1265%时,很可能会被吓一跳——"我的服务器要崩溃了吗?" 但实际上,这是一个完全正常的现象&#xf…

2026/7/18 9:27:40 阅读更多 →

日新闻

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:38 阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:38 阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:38 阅读更多 →

周新闻

月新闻