HarmonyOS 鸿蒙Next @Builder 如何以数组形式传递

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

HarmonyOS 鸿蒙Next @Builder 如何以数组形式传递

场景: 一个自定义组件内部有一个list, list的每一项内容都可由用户自定义, 参数改如何传递

想法1: 定义一个BuilderParam 参数, 使用尾随闭包形式传递; 问题: 无法获取到用户传入了多少个子组件, 无法遍历

想法2: 定义一个builder数组 Array<() => void>, 利用数组遍历; 问题: forEach内部  item无法执行

父组件:

cke_10645.png

自定义组件:

cke_11137.png

求指点, 问题在哪, 该怎么实现

2 回复
  1. 自定义组件Index使用ForEach来进行不同[@Builder](/user/Builder)函数的渲染,可以使用builderArr声明的wrapBuilder数组进行不同[@Builder](/user/Builder)函数效果体现。整体代码会较整洁。
  2. [@Builder](/user/Builder)

    function MyBuilder(value: string, size: number) {

      Text(value)

        .fontSize(size)

    }

    [@Builder](/user/Builder)

    function YourBuilder(value: string, size: number) {

      Text(value)

        .fontSize(size)

        .fontColor(Color.Pink)

    }

    const builderArr: WrappedBuilder<[string, number]>[] = [wrapBuilder(MyBuilder), wrapBuilder(YourBuilder)];

    [@Entry](/user/Entry)

    [@Component](/user/Component)

    struct Index {

      [@Builder](/user/Builder) testBuilder() {

        ForEach(builderArr, (item: WrappedBuilder<[string, number]>) => {

          item.builder('Hello World', 30)

        }

        )

      }

      build() {

        Row() {

          Column() {

            this.testBuilder()

          }

          .width('100%')

        }

        .height('100%')

      }

    }

在HarmonyOS的Next @Builder注解中,直接以数组形式传递参数给布局构建器可能不是直接支持的,因为@Builder通常用于自动生成构建方法,这些构建方法通常接受单个参数或者一系列参数,但不直接支持数组形式。你可以通过几种方式间接实现:

  1. 使用封装类:创建一个包含数组的类,然后将该类作为@Builder的参数。
  2. 使用可变参数:如果方法可以接受不同数量的同类型参数,可以考虑使用可变参数(如List<T>T...),尽管这不是传统意义上的数组,但可以实现类似功能。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部