harmonyOS学习笔记之@Provide装饰器和@Consume装饰器

news2024/11/18 7:32:11

@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于@State/@Link装饰器修饰的 父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。
其中@Provide装饰的变量是在祖先节点中,可以理解为被“提供”给后代的状态变量。@Consume装饰的变量是在后代组件中,去“消费(绑定)”祖先节点提供的变量。

@Provide/@Consume装饰的状态变量有以下特性:

  1. @Provide装饰的状态变量自动对其所有后代组件可用,即该变量被“provide”给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。
  2. 后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。
  3. @Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,变量类型必须相同。

@Provide和@Consume通过相同的变量名或者相同的变量别名绑定时,@Provide修饰的变量和@Consume修饰的变量是一对多的关系。不允许在同一个自定义组件内,包括其子组件中声明多个同名或者同别名的@Provide装饰的变量。
例如:

@Entry
@Component
struct ProvideAndConsume {
  // @State message: string = '我是父组件'
  @Provide('change') message: string = '我是父组件'

  build() {
    Row() {
      Column() {
        Text(this.message).ProvideAndConsumeSty('',()=>{
          this.message = "我是父组件变化后的值"
        })
        Divider()
        // 调用子组件
        ProvideAndConsumeSon()
      }
      .width('100%')
    }
    .height('100%')
  }
}
@Component
struct ProvideAndConsumeSon{
  build(){
    Column(){
      Text('我是儿子组件').ProvideAndConsumeSty(Color.Orange)
      Divider()
      // 调用孙子组件
      ProvideAndConsumeSun()
    }
  }
}
@Component
struct ProvideAndConsumeSun{
  @Consume change: string  //数据不能初始化   类型要与绑定的@Provide的类型一致
  build(){
    Column(){
      Text('我是孙子组件:'+this.change).ProvideAndConsumeSty(Color.Red,()=>{
        this.change = "我是孙子组件变化后的值"
      })
    }
  }
}
@Extend(Text) function ProvideAndConsumeSty(color?: string|Color,click?:()=>void){
  .fontSize(30)
  .fontWeight(FontWeight.Bold)
  .fontColor(color)
  .margin({
    top:15,
    bottom:15
  })
  .onClick(() => {
    click()
  })
}

下图是代码运行的效果
在这里插入图片描述
然后点击"我是父组件"文字
在这里插入图片描述
然后点击"孙子组件"文字
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Edge 中的msedgewebview2总想联网

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用Edge浏览器的时候,右下角火绒总会弹出“msedgewebview2”想要联网的弹窗,如下 点击发起程序,找到路径如下: C:\Program Files (x86)\Microsoft\…

ChatGPT在国内的使用限制,国内的ChatGPT替代工具

人工智能技术的发展不仅改变了我们的生活方式,也在各行各业发挥着越来越重要的作用。ChatGPT(Generative Pre-trained Transformer)作为一种先进的自然语言处理模型,由OpenAI推出,其在生成人类般流畅对话方面表现出色。…

【USRP】5G / 6G OAI 系统 5g / 6G OAI system

面向5G/6G科研应用 USRP专门用于5G/6G产品的原型开发与验证。该系统可以在实验室搭建一个真实的5G 网络,基于开源的代码,专为科研用户设计。 软件无线电架构,构建真实5G移动通信系统 X410 采用了目前流行的异构式系统,融合了FP…

QT使用SQLite 超详细(增删改查、包括对大量数据快速存储和更新)

QTSQLite 在QT中使用sqlite数据库,有多种使用方法,在这里我只提供几种简单,代码简短的方法,包括一些特殊字符处理。在这里也给大家说明一下,如果你每次要存储的数据量很大,建议使用事务(代码中…

dell服务器安装PERCCLI

因在linux 系统中无法查看系统磁盘的raid级别,也无法得知raid状态,需要安装额外的包来监控,因是dell服务器,就在dell网站中下载并安装 1、下载链接:驱动程序和下载 | Dell 中国https://www.dell.com/support/home/zh-…

一款Java实现的玩爆工具

这是一款涵盖娱乐到工作的软件程序,模块菜单包含:精选、博客园、观天下、听雨楼、短视频、电影、电视剧、藏金阁、云存储等诸多功能于一身的软件,下面我们来介绍一下软件的一些功能: 博客园:这是一个可以预览博客也可以…

论文笔记--Gemini: A Family of Highly Capable Multimodal Models

论文笔记-- 1. 文章简介2. 文章概括3 文章重点技术3.1 模型架构3.2 训练数据3.3 模型评估3.3.1 文本3.3.1.1 Science3.3.1.2 Model sizes3.3.1.3 Multilingual3.3.1.4 Long Context3.3.1.5 Human preference 3.3.2 多模态3.3.2.1 图像理解3.3.2.2 视频理解3.3.2.3 图像生成3.3.…

【mysql】隔离级别以及其验证实例

目录 前言 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 串行化(Serializable) 前言 在事物与隔离级别中我们讲解了事务与不同隔离级别&a…

Word中在公式后面自动加入序号

1、在第一个公式后面输入(英文输入法下)#(),并且把光标放到两个括号之间: 2、点击插入-文档部件-域,类别选编号,域名选AutoNum,格式选1,2,3,…,确…

kafka高吞吐、低延时、高性能的实现原理

作者:源码时代-Raymon老师 Kafka的高吞吐、低延时、高性能的实现原理 Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但…

docker 资源控制

Docker的资源控制 对容器使用宿主机的资源进行限制,如cpu,内存,磁盘I/O Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制,记录,隔离进程组使用的物理资源 Docker借助这个机制&…

python圣诞树代码编程

以下是一个简单的Python圣诞树代码: def draw_tree(height): for i in range(height): print( * (height - i - 1) * * (2 * i 1)) print( * (height - 1) |)draw_tree(10) 这个函数会绘制一个等腰三角形,其中每一行的星号数量从1开…

Java_LinkedList链表详解

目录 前言 ArrayList的缺陷 链表 链表的概念及结构 链表的种类 1.单向或双向 2.带头或不带头 3.循环或不循环 LinkedList的使用 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法介绍 LinkedList的遍历 ArrayList和LinkedList的…

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天,周,月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

如何解决el-table中动态添加固定列时出现的行错位

问题描述 在使用el-table组件时,我们有时需要根据用户的操作动态地添加或删除一些固定列,例如操作列或选择列。但是,当我们使用v-if指令来控制固定列的显示或隐藏时,可能会出现表格的行错位的问题,即固定列和非固定列…

Spring全面详解

目录 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入门 3. Spring Bean 3.1 的实例化方式 空参构造器 3.2 的属性注入 全参构造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的属性注入 1. Spring 概述 …

理解VAE(变分自编码器)

1.贝叶斯公式 贝叶斯理论的思路是,在主观判断的基础上,先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)。 P(A):没有数据B的支持下,A发生的概率,也叫做先验概率。…

C++ 关于结构体struct的一些总结

文章目录 一、 结构体(struct)是什么?(1)概念(2)struct 与 calss 的区别 二、定义、声明与初始化(1)三种定义结构体的方法:(2)结构体变量初始化 三、结构体嵌…

老有所依:TSINGSEE青犀养老院智能视频监管方案

养老院智能监控方案是为了提高养老院内老人的安全和护理质量,利用智能技术与监控设备进行全方位的监控和管理,可以加强对老人的监护和护理,提高养老院的服务质量和安全性。 旭帆科技基于视频技术与AI智能分析技术构建的养老院智能视频监控方…

算法:常见的链表算法

文章目录 链表算法两数相加两两交换链表中的节点重排链表合并K个升序链表K个一组翻转链表 总结 本篇总结常见的链表算法题和看他人题解所得到的一些收获 链表算法 关于链表的算法: 画图:画图可以解决绝大部分的数据结构的问题,任何的算法题…