HarmonyOS 鸿蒙Next 通过WrappedBuilder.builder创建的Component不能更新Component 是否WrappedBuilder.builder不支持更新
HarmonyOS 鸿蒙Next 通过WrappedBuilder.builder创建的Component不能更新Component 是否WrappedBuilder.builder不支持更新
通过WrappedBuilder.builder在创建一个component,能执行首次builder,然后更新父组件state,不能再次触发builder,通过builder创建的组件不更新。
build() {
Column() {
if (this.dxItemRenderService && this.section && this.templateItem) {
Text(this.section?.template?.name)
this.dxItemRenderService?.getDxWrappedBuilder().builder(this.section)
Text(this.section?.template?.name)
} else {
Text(‘not found’ + this.templateItem?.name);
}
}
.width(‘100%’)
.opacity(this.searchBarHasRender())
.onAreaChange(this.searchBarAreaChange.bind(this))
}
class Selects {
template?: Template;
}
[@ObservedV2](/user/ObservedV2)
class Template {
[@Trace](/user/Trace) name?: string
}
[@Builder](/user/Builder)
function overBuilder(select: Selects) {
Column() {
Text(`wrapBuildervalue:${select.template!.name}`)
}
}
const wBuilder: WrappedBuilder<[Selects]> = wrapBuilder(overBuilder);
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Parent {
[@Prop](/user/Prop) select: Selects = new Selects();
aboutToAppear(): void {
let tem = new Template();
tem.name = '123'
this.select.template = tem
}
build() {
Column() {
wBuilder.builder({ template: this.select.template })
Text(this.select!.template!.name)
Button('Click me').onClick(() => {
console.log('111')
this.select!.template!.name = 'ArkUI';
})
}
}
}
使用这个代码试下,我这边测试,可以刷线WrappedBuilder里面数据,不过使用的V2装饰器注解
在HarmonyOS鸿蒙系统中,WrappedBuilder.builder
是一种常用的构建器模式,用于简化组件(Component)的创建过程。通常情况下,通过 WrappedBuilder.builder
创建的组件应当支持正常的更新机制,因为构建器本身只是提供了一种便捷的构造方式,而不应影响组件的基本功能,包括更新。
如果遇到通过 WrappedBuilder.builder
创建的 Component
无法更新的情况,可能的原因包括但不限于:
- 组件本身的设计问题:检查组件的更新逻辑是否正确实现,包括状态管理、数据绑定等。
- 父组件或容器的限制:确认父组件或容器是否允许子组件更新。
- 系统或框架的bug:确认是否使用了最新版本的HarmonyOS SDK,以及是否存在已知的框架bug。
解决这类问题通常需要具体分析代码和上下文环境。如果确认代码逻辑无误且使用了正确的SDK版本,而问题依旧存在,那么可能是系统或框架层面的问题。此时,建议直接联系官方客服或查阅官方文档以获取更专业的帮助。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html