HarmonyOS 鸿蒙Next @BuilderParam中this指针问题
HarmonyOS 鸿蒙Next @BuilderParam中this指针问题
示例代码如下,this.message始终是undefined:
struct Index {
@State message: string = ‘@BuilderParam示例’;
buildTest(text: string) {
// !!!此处的this.message始终是undefined!!!
Text(${text} --- ${this.message}
)
}
build() {
Column() {
Text("-----")
.fontSize(18)
.fontWeight(FontWeight.Bold)
DemoView({ demoBlock: this.buildTest})
}
.height(‘100%’)
}
}
struct DemoView {
@BuilderParam demoBlock: (text: string) => void;
build() {
Column() {
this.demoBlock(“test @BuilderParam”)
}
}
}
DemoView({demoBlock: ()=>{this.buildTes()}})
我也碰到此问题,还准备提交问题单呢,多谢!
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
DemoView({ demoBlock: this.buildTest})
这样传值,this指向的是子组件DemoView,子组件中没有message变量,所以是undefined。
改为 DemoView({demoBlock: ()=>{this.buildTes()}}),this指向的还是父组件,父组件有message变量,所以有值。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-builderparam-0000001820999553
补充下,认真看下官方开发文档就很清楚了。
需注意this指向正确。
以下示例中,Parent组件在调用this.componentBuilder()时,this指向其所属组件,即“Parent”。[@Builder](/user/Builder) componentBuilder()通过this.componentBuilder的形式传给子组件[@BuilderParam](/user/BuilderParam) customBuilderParam,this指向在Child的label,即“Child”。[@Builder](/user/Builder) componentBuilder()通过():void=>{this.componentBuilder()}的形式传给子组件[@BuilderParam](/user/BuilderParam) customChangeThisBuilderParam,因为箭头函数的this指向的是宿主对象,所以label的值为“Parent”。
在HarmonyOS(鸿蒙)开发中,如果你在@BuilderParam
注解中遇到了this
指针的问题,这通常与注解的使用场景或Java/Kotlin的语法限制有关。@BuilderParam
主要用于构造器注解,帮助自动构建对象,而this
在注解内部或注解处理时并不直接可用,因为它依赖于类实例的上下文。
请检查你的使用场景是否误将this
用于注解参数或注解处理逻辑中。确保@BuilderParam
的使用符合其设计目的,即用于标注构造器参数以支持构建器模式。
如果问题依旧没法解决请加我微信,我的微信是itying888。