HarmonyOS 鸿蒙Next ets声明式UI开发,@state装饰带数组的class变量时异常情况
HarmonyOS 鸿蒙Next ets声明式UI开发,@state装饰带数组的class变量时异常情况
[@state](/user/state)装饰带数组的class变量,当修改变量里的数组时,ui界面不会刷新
完整测试代码如下:
```javascript
export class test_class{
data1: number
data2: number[]
constructor(data1: number,data2: number[]) {
this.data1 = data1
this.data2 = data2
}
}
[@Entry](/user/Entry)
[@Componentstruct](/user/Componentstruct) Index {
[@State](/user/State)
var_a : test_class = new test_class(10,[0,1])
private id : number = 5
build() {
Column({ space:10 }){
Row({space:20}) {
Button('Data1 add')
.fontSize(20).backdropBlur(0x317aff)
.margin({ right: 20, left: 20 })
.onClick((event: ClickEvent) => {
this.var_a.data1 ++
})
Button('New Data2')
.fontSize(20).backdropBlur(0x317aff)
.margin({ right: 20, left: 20 })
.onClick((event: ClickEvent) => {
this.var_a.data2.push(this.id)
this.id++
})
}.width('100%').height(60)
Text('data1 is : '+this.var_a.data1.toString())
.fontSize(25).backgroundColor(Color.Gray)
Text('data2 :')
.fontSize(25).backgroundColor(Color.Gray)
Column({space:5}) {
if(this.var_a.data2.length != 0) {
ForEach(this.var_a.data2, (item: number) => {
Text(item.toString()).fontSize(25)
}, (item: number) => item.toString())
}
}
}.width('100%').height('100%')
}
}
测试过程如下:
点击New Data2,界面不刷新,算不算bug ?
更多关于HarmonyOS 鸿蒙Next ets声明式UI开发,@state装饰带数组的class变量时异常情况的实战教程也可以访问 https://www.itying.com/category-93-b0.html
楼主你好,需要对数组进行重新赋值,具体可以参考:
Button('New Data2')
.fontSize(20).backdropBlur(0x317aff)
.margin({ right: 20, left: 20 })
.onClick((event: ClickEvent) => {
let temp = new Array();
this.var_a.data2.push(this.id)
for (var i = 0; i < this.var_a.data2.length; i++) {
temp.push(this.var_a.data2[i])
}
this.var_a.data2 = temp
this.id++
})
更多关于HarmonyOS 鸿蒙Next ets声明式UI开发,@state装饰带数组的class变量时异常情况的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这样处理可以达到实时刷新效果,但这样会增加cpu工作量,在复杂情况下可能不太适用(导致应用反应变慢),例如:数组比较大时;数据需高频刷新时(例如拖拽平移等),例如:
楼主你好,这个问题已经反馈给研发,请您耐心等待一下。
楼主你好,研发人员说按这个方法处理,感谢反馈。
楼主 有没有找到更好的办法 感觉这个方法实在是有损性能 不是很有的解决办法
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS鸿蒙Next的ets声明式UI开发中,当使用@state
装饰带数组的class变量时遇到异常情况,通常可能是由以下几个原因导致的:
-
数组类型不匹配:确保数组中的元素类型与声明的类型完全一致。例如,如果声明为
@state array: Array<number>
,则数组中的所有元素都应为数字类型。 -
数组初始化问题:检查数组是否在使用前已正确初始化。未初始化的数组可能导致运行时错误。
-
数组操作不当:在修改数组时,确保没有违反数组操作的规则,如越界访问、类型不匹配地赋值等。
-
状态更新机制:在ets中,使用
@state
装饰的变量在更新时会自动触发UI刷新。如果数组更新操作未正确触发这一机制,可能导致UI不同步。确保在修改数组后,相关的状态更新被正确触发。 -
内存管理问题:虽然ets框架通常会自动管理内存,但在复杂的数据操作中,仍需注意避免内存泄漏或无效引用。
如果上述检查后问题依旧没法解决,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html,