HarmonyOS 关于使用@BuilderParam的问题

代码场景如下,在点击三次按钮后,期望显示“默认”文本,因为无法知晓@BuilderParam执行结果,所以实际仍然进到backView()方法不显示任何内容,请问该如何实现期望效果?

@Entry  
@Preview  
@Component  
struct Parent {  
  @State count: number = 0  
  
  build() {  
    Column() {  
      Child({  
        leftCustomView: () => {  
          this.backView()  
        }  
      })  
      Button('点击').onClick((event: ClickEvent) => {  
        this.count++  
      })  
    }  
    .height('100%')  
    .width('100%')  
    .backgroundColor(Color.Blue)  
  }  
  
  @Builder  
  backView() {  
    if (this.count < 3) {  
      Text(`返回${this.count}`).onClick(() => {  
      })  
    }  
  }  
}  
  
@Component  
export struct Child {  
  @Builder  
  empty() {}  
  
  @BuilderParam leftCustomView: () => void = this.empty  
  
  build() {  
    RelativeContainer() {  
      this.left()  
    }.align(Alignment.Center).width('100%').height(44).backgroundColor(Color.Pink)  
  }  
  
  @Builder  
  left() {  
    Row() {  
      if (this.leftCustomView !== this.empty) {  
        this.leftCustomView()  
      } else {  
        Text('默认')  
      }  
    }.id('left').backgroundColor(Color.Green).alignRules({  
      left: { anchor: '__container__', align: HorizontalAlign.Start },  
      center: { anchor: '__container__', align: VerticalAlign.Center }  
    })  
  }  
}
HarmonyOS
2024-10-21 11:58:25
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

针对上述描述效果可以使用将count值传递给子组件来判断:参考demo。

@Entry  
@Preview  
@Component  
struct Parent1 {  
  @State count: number = 0  
  
  build() {  
    Column() {  
      Child1({  
        leftCustomView: () => {  
          this.backView()  
        },  
        count:this.count  
      })  
      Button('点击').onClick((event: ClickEvent) => {  
        this.count++  
      })  
    }  
    .height('100%')  
    .width('100%')  
    .backgroundColor(Color.Blue)  
  }  
  
  @Builder  
  backView() {  
    if (this.count < 3) {  
      Text(`返回${this.count}`).onClick(() => {  
      })  
    }  
  }  
}  
@Component  
export struct Child1 {  
  @Prop count:number  
  @Builder  
  empty() {}  
  
  @BuilderParam leftCustomView: () => void = this.empty  
  
  build() {  
    RelativeContainer() {  
      this.left()  
    }.align(Alignment.Center).width('100%').height(44).backgroundColor(Color.Pink)  
  }  
  
  @Builder  
  left() {  
    Row() {  
      if (this.count<3) {  
        this.leftCustomView()  
      } else {  
        Text('默认')  
      }  
    }.id('left').backgroundColor(Color.Green).alignRules({  
      left: { anchor: '__container__', align: HorizontalAlign.Start },  
      center: { anchor: '__container__', align: VerticalAlign.Center }  
    })  
  }  
}

或者把子组件封装的仅当插槽使用,由父组件决定传递显示的组件信息。

分享
微博
QQ
微信
回复
2024-10-21 17:24:43
相关问题
HarmonyOS关于API使用问题
396浏览 • 1回复 待解决
HarmonyOS关于异步Promise使用问题
458浏览 • 1回复 待解决
关于 SO 文件使用问题
239浏览 • 1回复 待解决
HarmonyOS关于使用fs.copyfile问题
509浏览 • 1回复 待解决
关于HarmonyOS webview中iFrame使用问题
309浏览 • 1回复 待解决
关于 Extend 使用问题
293浏览 • 1回复 待解决
HarmonyOS 关于Iconfont如何使用问题
314浏览 • 1回复 待解决
HarmonyOS 关于VPN一些使用问题
44浏览 • 1回复 待解决
关于xml中include使用问题
7470浏览 • 2回复 待解决
关于 DevEco Studio 使用语言问题
3048浏览 • 1回复 待解决
@BuilderParam修饰属性报错
1780浏览 • 1回复 待解决
关于数据持久化使用问题
263浏览 • 1回复 待解决
HarmonyOS 关于ColorFilter问题
430浏览 • 1回复 待解决
HarmonyOS 关于taskpool问题
217浏览 • 1回复 待解决
关于导入图片使用权限和问题
1770浏览 • 1回复 待解决
关于Grid容器和WaterFlow使用问题
904浏览 • 1回复 待解决