更新时间:2022-06-25 15:13:05浏览次数:304+次
使用的是DevEco Studio鸿蒙OS开发工具,然后用以下代码这种方式更新前端不会跟着更新,文档里面看到有@State装饰(@State装饰的变量是组件内部的状态数据,当这些状态数据被修改时,将会调用所在组件的build方法进行UI刷新),但是不支持object类型,有其他方式解决吗?
代码
lis:Array<object> = [
{
'id': 0,
'name': '计划',
'image': $rawfile('index/ic_public_view_list_filled2.png'),
'number':0
},
this.lis['0'].name = 1
附:@State状态数据具有以下特征:
支持多种类型:允许class、number、boolean、string强类型的按值和按引用类型。允许这些强类型构成的数组,即Array<class>、Array<string>、Array<boolean>、Array<number>。不允许object和any。
支持多实例:组件不同实例的内部状态数据独立。
内部私有:标记为@State的属性是私有变量,只能在组件内访问。
需要本地初始化:必须为所有@State变量分配初始值,将变量保持未初始化可能导致框架行为未定义。
创建自定义组件时支持通过状态变量名设置初始值:在创建组件实例时,可以通过变量名显式指定@State状态属性的初始值。
解答
“number”最好不要作为属性,因为“number”是字段类型。Object请改为class,示例代码如下:
@Observed export class xxx {
id: number;
name: string;
image: string;
number: number;
constructor(id: number, name: string, image:string,number:number) {
this.id = id;
this.name = name;
this.image = name;
this.number = number;
}
}
lis: Array<xxx> = [{
'id': 0,
'name': '计划',
'image': xxx,
'number': 0
}]
this.lis[0].name='new Name'
注:根据以上示例解决问题。
相关资讯