HarmonyOS 组件隔代双向数据通信Provide与Consume

今天 我们说一个场景

我们可以编写代码如下

@Entry
@Component
struct Index {@State name:string = "小猫猫";build() {Row() {Column() {Text(this.name)Button("改个name").onClick(() => {this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";})son()}.width('100%')}.height('100%')}
}@Component
struct son {build() {Row() {Column() {Text("子组件")grandson()}}}
}@Component
struct grandson {build() {Row() {Column() {Text("底层组件")}}}
}

简单捋一下 我们index组件上挂了@Entry修饰器 说明 第一次进入page 默认访问 index组件
然后 他定义了一个name 用@State修饰 说明这是个响应式数据
然后 index 调用了 son 组件
son 又调用了 grandson 组件
运行结果如下
在这里插入图片描述
那么 如果我们想将index 组件内的name 传给 grandson 呢?

之前 我们说的 @Link 其实 你一层一层传下来是可以的 但是 如果中间隔离十几二十个组件呢?
一层一层传下来 就显得有点捞了

这里 我们就要带出一对新的修饰器 @Provide 和 @Consume

我们可以这样写

@Entry
@Component
struct Index {@Provide name:string = "小猫猫";build() {Row() {Column() {Text(this.name)Button("改个name").onClick(() => {this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";})son()}.width('100%')}.height('100%')}
}@Component
struct son {build() {Row() {Column() {Text("子组件")grandson()}}}
}@Component
struct grandson {@Consume name:stringbuild() {Row() {Column() {Text(this.name)Button("改个name").onClick(() => {this.name = "小海豚";})}}}
}

我们用 Provide 声明name 表示 将变量提供给后代组件
然后 我们在 grandson 组件中去取 通过@Consume 这里注意 需要同名 然后 类型相同即可
运行结果如下
在这里插入图片描述
且无论是在 哪一个组件 修改这个值 都是可以互相响应的

这个数据传递还是个双向的 非常的好用

如果说 你不想同名 我们可以这样

@Entry
@Component
struct Index {@Provide("name") name:string = "小猫猫";build() {Row() {Column() {Text(this.name)Button("改个name").onClick(() => {this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";})son()}.width('100%')}.height('100%')}
}@Component
struct son {build() {Row() {Column() {Text("子组件")grandson()}}}
}@Component
struct grandson {@Consume("name") userName:stringbuild() {Row() {Column() {Text(this.userName)Button("改个name").onClick(() => {this.userName = "小海豚";})}}}
}

括号后面跟一个别名即可 我们这里都叫name

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——X-Decoder

Generalized Decoding for Pixel, Image, and Language Towards a Generalized Multi-Modal Foundation Model 1、概述 X-Decoder没有为视觉和VL任务开发统一的接口,而是建立了一个通用的解码范式,该范式可以通过采用共同的(例如语义&#…

VScode远程连接服务器,Pycharm专业版下载及远程连接(深度学习远程篇)

Visual Code、PyCharm专业版,本地和远程交互。 远程连接需要用到SSH协议的技术,常用的代码编辑器vscode 和 pycharm都有此类功能。社区版的pycharm是免费的,但是社区版不支持ssh连接服务器,只有专业版才可以,需要破解…

web架构师编辑器内容-HTML2Canvas 截图的原理

HTML2Canvas 截图的原理 目的:一个canvas元素,上面有绘制一系列的HTML节点 局限:canvas中没法添加具体的Html节点,它只是一张画布 通过canvas.getContext(‘2d’)可以拿到canvas提供的2D渲染上下文,然后在里面绘制形…

【Hive】——函数案例

1 Hive 多字节分隔符处理 1.1 默认规则 Hive默认序列化类是LazySimpleSerDe,其只支持使用单字节分隔符(char)来加载文本数据,例如逗号、制表符、空格等等,默认的分隔符为”\001”。根据不同文件的不同分隔符&#xf…

Git一个仓库包含多个不同的项目VUE(老项目的基础上,新建分支放新项目)

背景: 原有项目A(vue2.6),需要在A的基础上接入组件库,涉及到项目升级,领导不想走这条路,建议重新构建一版2.7的项目B,那么现在就需要把项目B与项目A远程到同一个仓库; 解…

sigmoid softmax优化

1.前言 最近在搞模型部署发现,推理速度不能满足我们需求,于是最近学习了优化算子技巧,学到了sigmoid,softmax算子优化,真的数学之美。2.sigmoid算子优化 一.算子优化图 我们根据sigmoid公式,我们进行求反…

AI安全综述

1、引言 AI安全这个话题,通常会引伸出来图像识别领域的对抗样本攻击。下面这张把“熊猫”变“猴子”的攻击样例应该都不陌生,包括很多照片/视频过人脸的演示也很多。 对抗样本的研究领域已经具备了一定的成熟性,有一系列的理论来论述对抗样本…

Jmeter 压测 —— 非GUI模式执行实例!

1、上传脚本 把在Windows下调试好的脚本上传的Linux系统/home目录下。 注意:只留测试脚本,屏蔽其它监控组件,比如:查看结果树、聚合报告、监听器等。 2、执行脚本 ①输入命令执行脚本 jmeter -n -t case.jmx -l case.jtl -n&…

【SD】IP-Adapter 进阶 - 垫图 【画风重绘-必看】

目录 关于SD1.5的画风迁移 修改动作-方法一:提示词 修改动作-方法二:openpose 关于SD1.5的画风迁移 1.5测试模型:flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图: 文生图:best quality,masterpiece, co…

W6100-EVB-Pico评估版介绍

文章目录 1 简介2 硬件资源2.1 硬件规格2.2 引脚定义2.3 工作条件 3 参考资料3.1 Datasheet3.2 原理图3.3 尺寸图(尺寸:mm)3.4 参考例程 4 硬件协议栈优势 1 简介 W6100-EVB-Pico是一款基于树莓派RP2040和全硬件TCP/IP协议栈以太网芯片W6100的…

idea Springboot小区紧急事件上报系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 小区紧急事件上报系统是一套完善的信息系统,结合springboot框架和jsp完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具 有完整的源代码和数据库&am…

看图了解ODF光纤配线架,详细熔接过程学习

弱电工程,远距离传输离不开光纤,只有光纤才能让网络传输的更远,今天了解光纤的配套产品,光纤配线架(Optical Distribution Frame)用于光纤通信系统中局端主干光缆的成端和分配,可方便地实现光纤…