HarmonyOS鸿蒙Next中【@BuilderParams】当@BuilderParams参数传入一个全局@Builder,发生异常
HarmonyOS鸿蒙Next中【@BuilderParams】当@BuilderParams参数传入一个全局@Builder,发生异常 当@BuilderParams参数传入一个全局@Builder,发生以下异常。但如果把全局@Builder改为局部@Builder则无此问题。像咨询原因和推荐的解决方式。
异常信息
Reason: TypeError Error name: TypeError Error message: Cannot read property observeComponentCreation2 of undefined SourceCode: (parent ? parent : this).observeComponentCreation2((elmtId, isInitialRender) => { ^
Stacktrace: at MyButton (entry/src/main/ets/pages/Page.ets:34:18) at builder (entry/src/main/ets/pages/Page.ets:25:11) at initialRender (entry/src/main/ets/pages/Page.ets:9:7)
参考代码
@Component
struct SomeComponent {
@BuilderParam builder: () => void
build() {
Row() {
Text('标题').layoutWeight(1)
this.builder()
}.width('100%')
}
}
@Entry
@Component
struct Page {
text = 'hi'
build() {
Column() {
SomeComponent({
builder: () => {
MyButton()
}
})
}.width('100%')
}
}
[@Builder](/user/Builder)
function MyButton() {
Text('Button')
}
更多关于HarmonyOS鸿蒙Next中【@BuilderParams】当@BuilderParams参数传入一个全局@Builder,发生异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4 回复
报错是由于预览页面/组件含有未初始化成功的成员变量,调用这些成员变量的属性/方法时会导致报错,如果你想使用全局@Builder,可以使用下列方式:
@Component
struct SomeComponent {
@BuilderParam builder: () => void = MyButton
build() {
Row() {
Text('标题')
.layoutWeight(1)
this.builder()
}
.width('100%')
}
}
@Entry
@Component
struct Page {
text = 'hi'
build() {
Column() {
SomeComponent()
}
.width('100%')
}
}
[@Builder](/user/Builder) function MyButton() {
Text('Button')
}
参考文档:初始化builderparam装饰的方法
更多关于HarmonyOS鸿蒙Next中【@BuilderParams】当@BuilderParams参数传入一个全局@Builder,发生异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
@BuilderParam builder: () => void
需要添加初始值
@BuilderParam builder: () => void = ()=>{}
在HarmonyOS鸿蒙Next中,@BuilderParams用于传递构建函数(@Builder)。当全局@Builder作为参数传入时发生异常,可能原因包括:
- 作用域问题:全局
@Builder可能未在正确的作用域内定义或引用。 - 参数类型不匹配:
@BuilderParams期望的构建函数签名与传入的全局@Builder不匹配。 - 生命周期问题:全局
@Builder可能在组件生命周期外被调用。
建议检查@Builder的定义、作用域及调用时机,确保其符合预期。


