HarmonyOS 鸿蒙Next @BuilderParams 尾随闭包方式能否传递参数

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next @BuilderParams 尾随闭包方式能否传递参数

[@BuilderParams](/user/BuilderParams) 尾随闭包方式能否传递参数

在尾随闭包的使用说明里没看到说不能传递参数的,那么使用的时候是否可以传参,怎么获取传递的参数?

```javascript
[@Component](/user/Component)
struct MyComponent {
  build() {
    TestBuild({
      arg: "hello"
    }) { 
      //#3 ??这边能否获取父组件调用时传递的参数??
      Text()
    }
  }
}

[@Component](/user/Component)
struct TestBuild {
  //#1 定义一个有参数的BuilderParam
  [@BuilderParam](/user/BuilderParam) content(arg: string): void
  [@State](/user/State) arg: string = ""

  build() {
    Column() {
      //#2 调用的时候传递参数 
      this.content(this.arg)
      Button("change Arg").margin({ top: 24 }).onClick(() => {
        this.arg = "change!!"
      })
    }
  }
}

更多关于HarmonyOS 鸿蒙Next @BuilderParams 尾随闭包方式能否传递参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

父组件在调用MyComponent组件时,只需要在MyComponent组件中使用@Prop来接受父组件传递的参数即可:

struct CustomContainer {

  [@Prop](/user/Prop) header: string = '';

  @Builder closerBuilder(){}

  // 使用父组件的尾随闭包{}(@Builder装饰的方法)初始化子组件@BuilderParam
  @BuilderParam closer: () => void = this.closerBuilder

  build(){
    Column() {
      Text(this.header)
        .fontSize(30)
      this.closer()
    }
  }
}

@Builder function specificParam(label1: string, label2: string) {
  Column() {
    Text(label1)
      .fontSize(30)
    Text(label2)
      .fontSize(30)
  }
}

@Entry
@Component
struct CustomContainerUser {
  @State text: string = 'header';

  build(){
    Column() {
      // 创建CustomContainer,在创建CustomContainer时,通过其后紧跟一个大括号“{}”形成尾随闭包
      // 作为传递给子组件CustomContainer @BuilderParam closer: () => void的参数
      CustomContainer({ header: this.text }) {
        Column() {
          specificParam('testA', 'testB')
        }
        .backgroundColor(Color.Yellow)
        .onClick(() => {
          this.text = 'changeHeader';
        })
      }
    }
  }
}

更多关于HarmonyOS 鸿蒙Next @BuilderParams 尾随闭包方式能否传递参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,关于@BuilderParams尾随闭包方式能否传递参数的问题,答案是肯定的。@BuilderParams注解通常用于构建器模式中的参数接收,以支持链式调用和参数传递的灵活性。在鸿蒙的某些组件或框架中,如果设计允许,尾随闭包(或称为lambda表达式、匿名函数)确实可以接收并传递参数。

这种机制允许开发者在构建对象或配置设置时,以更简洁和直观的方式传递必要的参数。例如,在配置UI组件的属性或设置事件回调时,可以通过闭包直接传递参数,而无需显式地创建中间对象或方法。

不过,具体实现细节和语法可能会因鸿蒙版本、具体组件或框架的设计而有所不同。开发者在使用时,应参考相应的官方文档或API指南,以确保正确理解和使用@BuilderParams注解及尾随闭包参数传递的方式。

如果在实际开发中遇到具体问题,如参数传递失败或编译错误,可能是由于语法错误、注解使用不当或API限制等原因。此时,建议仔细检查代码,并参考最新的鸿蒙开发文档。如果问题依旧没法解决请联系官网客服,官网地址是:

https://www.itying.com/category-93-b0.html

回到顶部