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/23 9:46:09 阅读更多 →
Anaconda环境管理:Python开发者的高效解决方案

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

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

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

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

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

2026/7/23 10:10:57 阅读更多 →

最新新闻

告别偶发故障排查难题|南金研 RoyalScope波形记录 分析仪,打通 CAN 总线测试全链路

告别偶发故障排查难题|南金研 RoyalScope波形记录 分析仪,打通 CAN 总线测试全链路

不少工程师都遇到过这类痛点:设备间歇性通讯报错、偶发掉线、信号畸变,故障难以复现。普通示波器存储时长受限、传统总线分析仪看不到底层物理波形,报文异常与信号失真无法关联,长时间蹲守测试,依旧抓不住转瞬即逝的异…

2026/7/23 14:28:57 阅读更多 →
Cloudflare萌系设计:技术产品的亲和力革命

Cloudflare萌系设计:技术产品的亲和力革命

1. Cloudflare的萌系设计:当技术巨头遇上二次元文化Cloudflare作为全球知名的网络安全和CDN服务提供商,在技术圈一直以稳定可靠著称。但最近他们的各种萌系设计却意外出圈,让不少用户直呼"被萌到了"。这种反差萌正是Cloudflare独特…

2026/7/23 14:28:57 阅读更多 →
SolidWorks 2020安装与激活全流程指南

SolidWorks 2020安装与激活全流程指南

1. SolidWorks 2020安装全流程详解 作为一名使用SolidWorks超过8年的机械设计师,我深知软件安装过程中的各种"坑"。今天我将分享最可靠的SolidWorks 2020安装方法,包含视频教程中不会告诉你的12个关键细节。这个教程适用于Windows 10/11系统&a…

2026/7/23 14:28:57 阅读更多 →
【Bug已解决】[Proposal] ImportError with Transformers 5.x: `cannot import name ‘HybridCache‘ from ‘transf

【Bug已解决】[Proposal] ImportError with Transformers 5.x: `cannot import name ‘HybridCache‘ from ‘transf

【Bug已解决】[Proposal] ImportError with Transformers 5.x: cannot import name HybridCache from transformers 解决方案 一、现象长什么样 升级到 transformers>5.0 之后,导入 PEFT(或任何依赖 HybridCache 的代码)直接炸…

2026/7/23 14:28:57 阅读更多 →
AI代理记忆管理系统:Embedding Pipeline设计与优化

AI代理记忆管理系统:Embedding Pipeline设计与优化

1. 项目概述:Agent Memory的核心价值 在AI代理开发领域,记忆管理一直是制约系统长期运行的瓶颈问题。传统方法要么将所有上下文信息塞进有限的token窗口导致质量下降,要么过度修剪丢失关键信息。我们构建的这个Embedding Pipeline解决方案&am…

2026/7/23 14:28:57 阅读更多 →
Word:更改列表级别

Word:更改列表级别

在 Word 中更改列表级别,最快捷方式是使用Tab(降级)和ShiftTab(升级)快捷键;也可通过“开始”选项卡中的“更改列表级别”菜单或标尺手动调整 。操作方法 1. 快捷键调整(推荐)&#…

2026/7/23 14:27:57 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻