HarmonyOS 鸿蒙Next子组件使用疑点重重 是工具本身的BUG还是人为的使用姿势BUG

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

HarmonyOS 鸿蒙Next子组件使用疑点重重 是工具本身的BUG还是人为的使用姿势BUG

自定义容器组件

@Component
struct ContainerPanel {
@Builder slot() {

} @BuilderParam children: () => void = this.slot

build() { this.children() } }

export { ContainerPanel }

使用子组件的page.ets

import { ContainerPanel } from ‘./ContainerPanel’

@Entry @Component struct Index { @State input_string: string = ‘help me please!’ @Builder children() { TextInput({text: this.input_string}) .width(300) .height(80) .onChange((value: string) => { this.input_string = value }) }

build() { Row() { Column() { ///疑点一:使用该方式,不能正常的让子组件绑定到this.input_string变量上,但该容器组件能使用自身的margin等属性。 // ContainerPanel({children:this.children}).margin({ top: 20}) ///疑点二:使用该方式,可以正常的让子组件梆定到this.input_string变量上,但容器组件本身不能再访问margin等属性。 ContainerPanel(){ this.children() } } .width(‘100%’) } .height(‘100%’) } }

///疑点一:使用该方式,不能正常的让子组件绑定到this.input_string变量上,但该容器组件能使用自身的margin等属性。
的效果:
cke_6371.png


///疑点二:使用该方式,可以正常的让子组件梆定到this.input_string变量上,但容器组件本身不能再访问margin等属性。

cke_7401.png

但。。。。。。。。。。。。。

cke_10420.png

何解??@华为工程师,@互联网大神

11 回复

疑点一方式是把父组件中的[@Builder](/user/Builder)构建函数传递给了子组件的children变量,替换了默认的slot函数;所以此时被传递的构建函数中this指向变成了子组件,因此无法再找到在父组件中的属性变量input_string;若是需要此变量可考虑将在子组件中添加一个对应变量并进行[@Link](/user/Link)同步;

疑点二是用尾随闭包方式直接创建一个匿名构建函数替代默认slot;在此默认组件中包含了父组件的children构建函数,而children是在本地并非传递给子组件,因此this指向仍在父组件;对于margin属性使用可尝试在子组件的build()中先加一层Column、Row之类的容器,看是否可解决;可能是子组件直接调用children()被匿名构建函数替代后缺乏外层容器组件导致无法加载 margin属性。

针对this这个可以通过 ContainerPanel({children:this.children.bind(this)}).margin({ top: 20}) bind(this)解决,但这个margin,加Row,Colum都不能解决。

可在调用时先套一层Column/Row然后在其上用margin, 不在ContainerPanel上用应当可以解决;也可在children构建函数中同样处理,只要结果一样不必盯死子组件:)

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

套一层意义就变了,虽说不影响使用,但不舒服。

估计采用了尾随闭包的方式,是不允许再对属性进行访问吧,这点官网也没有介绍:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/arkts-builderparam-0000001524416541-V2

感觉这很普通的自定义组件,就不能了?和传统的ts的slot,vue,react等差别还是存在啊。

提单要求改进!只要要求合理,对开发有利就让工具开发团队放进新版中。。。

你提单了吗?

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

有需求的去提吧:)

针对“HarmonyOS 鸿蒙Next子组件使用疑点重重”的问题,这可能是由于系统本身的BUG或人为使用不当所导致。

首先,HarmonyOS NEXT作为一款全新架构的操作系统,在推广过程中可能会遇到各种挑战,尤其是在早期测试阶段,子组件的适配和优化可能尚未完善,因此可能会存在一些BUG。

其次,用户在使用过程中,如果未能正确理解和使用子组件的功能和特性,也可能导致使用上的问题。例如,未能正确配置子组件的属性、未能正确处理子组件的事件等,都可能导致使用效果不佳。

为了解决这个问题,建议仔细查阅HarmonyOS NEXT的官方文档,了解子组件的使用方法和注意事项。同时,也可以关注开发者社区的相关讨论,看看是否有其他开发者遇到并解决了类似的问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部