HarmonyOS 鸿蒙Next自定义组件能接收一个布局为参数吗?

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next自定义组件能接收一个布局为参数吗?

自定义组件能不能接收一个布局或者另一个组件为参数呢?

类似Refresh,Column这样,后面跟个大括号就能写布局代码。

比如,我这里很多页面用到了Refresh包裹List

然后Refresh、加载等待页面、加载错误页面做逻辑判断,不同情况展示不同页面。

这样每个页面都会做这些判断,重复代码很多,每个页面唯独Refresh里的布局样式不同。

我想把外面的内容封装成一个组件,然后只把Refresh里面的布局传过去。

这样该如何实现呢?

4 回复
可以考虑传[@Builder](/user/Builder),用[@BuilderParam](/user/BuilderParam)接收,实现类似插槽的功能

不支持传递组件,也不支持继承组件,因此很多vue、android上功能这边都需要重复代码去实现。

目前就发现一个window窗口可以不依赖页面,给组件路径就能加载对应组件,看有人拿它来做loading,但是这也有缺点,就是物理返回失效了,用户必须点击上面某个按钮,或者加个定时器调用指定的代码才能再隐藏/关闭window窗口。

window使用参考:https://developer.huawei.com/consumer/cn/blog/topic/03152984411920042

可以了解一下[@BuilderParam](/user/BuilderParam)装饰器,使用方法:

[@Component](/user/Component)
struct MyComponent(){
[@BuilderParam](/user/BuilderParam) newBuilder:()=>void

build{ this.newBuilder() }

}

父组件:

@Entry
@Component
struct Parent{

build{ MyComponent(){ Text(‘传递给子组件的Text’) } }

}

更多使用还请参考文档

@BuilderParam装饰器:引用@Builder函数-UI范式基本语法-学习ArkTS语言-基础入门 | 华为开发者联盟 (huawei.com)

HarmonyOS 鸿蒙Next自定义组件能接收一个布局为参数。在HarmonyOS鸿蒙Next中,自定义组件确实具备接收布局作为参数的能力。这通常通过@Builder@BuilderParam装饰器来实现,允许父组件向子组件传递布局或子组件的生成逻辑。不过,需要注意的是,这种方式不支持直接传递组件实例或继承组件,而是传递一个构建函数或构建逻辑,由子组件在内部进行实例化和布局。

在自定义组件内部,可以通过onMeasureSize和onPlaceChildren等接口来测量和布局子组件,从而实现对传入布局的动态处理和展示。这种方式提高了代码的复用性和灵活性,使得开发者能够在不同的场景下重用相同的自定义组件,并通过传递不同的布局参数来实现多样化的展示效果。

如果在使用过程中遇到具体问题或限制,建议查阅HarmonyOS官方文档或开发者社区的相关讨论。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部