ObjectLink 修改类的嵌套属性后build未被执行
修改ObjectLink 嵌套类的属性build不执行,想要一个可以定位原因排查问题的技术方案
Column(){
if(this.insuranceModel.hasScrollModule){
List() {
ForEach(this.insuranceModel.insureObjList, (item: InsureObj, index: number) => {
ListItem(){
if(item.scroll) {
this.renderInsureItem(item, index)
}
}
})
}
@Builder renderInsureItem(item: InsureObj, index: number){
Column() {
Image(item.productIcon)
.width(36)
.height(36)
.margin({ top: 6 })
Row(){
Text(item.showTitle)
.fontColor('#333333')
.fontSize(14)
.fontWeight(500)
if(!item.emptyInsCard){
Text(FIconFont.otaInfo)
.fontFamily(FIconFont.iconFontFamily)
.fontColor('#333333')
.fontSize(16)
.margin({left: 2})
}
}
.margin({ top: 2 })
Column(){
this.priceView(item)
}
DashLine({widthValue: 98})
.margin({bottom:6})
Column() {
this.descListView(item)
}
Text(item.isSelected ? FIconFont.checked : FIconFont.unCheck)
.fontColor(item.isSelected ? this.checkedColor : this.unCheckColor)
.fontFamily(FIconFont.iconFontFamily)
.fontSize(20)
.lineHeight(24)
.margin({top: item.emptyInsCard ? 14 : 10})
.onClick(() => {
item.isSelected = !item.isSelected;
})
}
在自定义构建函数中,不允许改变参数值,同时按照值传递时,状态变量的改变不会引起@builder方法内的UI刷新,文档中有说明:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5
基于你需要的场景,调整你的代码如下:
objectLink使用方式及场景文档请参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-observed-and-objectlink-V5
1、调试工具:当前IDE是支持相关功能调试的,但是由于当前harmonyOS SDK暂不开源,所以调试时系统部分为黑盒。
2、该UI刷新问题本身:
(1)在自定义构建函数中,不允许改变参数值,同时按照值传递时,状态变量的改变不会引起@builder方法内的UI刷新。
(2)Objectlink修饰的对象赋值会导致双向绑定关系失效,导致UI无法刷新。