写点什么

鸿蒙 Next 状态管理装饰器 V2 @Provider @Consumer

作者:auhgnixgnahz
  • 2025-06-23
    北京
  • 本文字数:801 字

    阅读完需:约 3 分钟

@Provider 和 @Consumer 用于跨组件层级数据双向同步,可以使得开发者不用拘泥于组件层级

@Provider 和 @Consumer 属于状态管理 V2 装饰器,所以只能在 @ComponentV2 中才能使用,在 @Component 中使用会编译报错。

@Provider 和 @Consumer 提供了跨组件层级数据双向同步的能力




@Entry@ComponentV2struct test3{  @Provider() message:string='Hello World'  @Provider('msg') once_message:string='Hello World'  build() {    Column({space:20}){      Text('父布局:'+this.message).fontSize(20).fontColor(Color.Red)      Text('父布局:'+this.once_message).fontSize(20).fontColor(Color.Red)      Button('刷新').onClick(()=>{        this.message='Hello HarmonyOS '+Math.floor(Math.random() * 11)        this.once_message='Hello HarmonyOS '+Math.floor(Math.random() * 11)      })
child1() }.width('100%') .height('100%') }}@ComponentV2struct child1{ @Consumer() message:string ='message' //参数名不同,没有设置别名,查找不到父布局中的Provider无法刷新 @Consumer() child_message:string ='child_message' //定义了别名,可以通过别名查找到父布局中的Provider 参数名可以不同 @Consumer('msg') once_message:string='once_message' @Consumer('msg') childOnceMsg:string='childOnceMsg' build() { Column(){ Text('子布局:'+this.message).fontSize(20) Text('子布局:'+this.child_message).fontSize(20).fontColor(Color.Red) Text('子布局:'+this.once_message).fontSize(20) Text('子布局:'+this.childOnceMsg).fontSize(20) Button('子布局刷新').onClick(()=>{ this.message='Hello'+Math.floor(Math.random() * 11) this.once_message='Hi'+Math.floor(Math.random() * 11) }) } }}
复制代码


发布于: 刚刚阅读数: 2
用户头像

auhgnixgnahz

关注

还未添加个人签名 2018-07-10 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙Next状态管理装饰器V2 @Provider @Consumer_鸿蒙Next_auhgnixgnahz_InfoQ写作社区