HarmonyOS鸿蒙Next中ArkTs不支持Map对象作为状态变量吗?
HarmonyOS鸿蒙Next中ArkTs不支持Map对象作为状态变量吗?
使用Map作为状态变量,可以正常编译,但在运行时会发生错误。
示例:
@Entry
@Component
struct Index{
@State data:Map<string,string> = new Map()
aboutToAppear(){
this.data.set("a","test")
}
build(){
Text(this.data.get("a"))
}
}
报错:
Device info:OpenHarmony 3.2
Build info:OpenHarmony 3.2.9.1
Module name:com.away.myapplication
Version:1.0.0
Pid:30605
Uid:20040005
Lifetime: 0.000000s
Js-Engine: ark
page: pages/Index.js
Error message: obj is not JSMap
SourceCode:
this.data.set("a", "test");
^
Stacktrace:
at aboutToAppear (/ets/pages/Index.ets:6:5)
如果确实是不可以的话那应该用什么进行替代?
更多关于HarmonyOS鸿蒙Next中ArkTs不支持Map对象作为状态变量吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个官方有给解决方案吗?同样遇到了,华为工程师谁能给解答一下????
更多关于HarmonyOS鸿蒙Next中ArkTs不支持Map对象作为状态变量吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
@Entry@Componentstruct Index{ @State data:any = {} aboutToAppear(){ this.data.a = “test” } build(){ Text(this.data.a) } } 看下 ts 语法就懂了
@State不支持any的,如果写any会直接报错的,不过可以这样写
@Entry @Component struct Index{
@State data:object = {}
aboutToAppear(){
// @ts-ignore
this.data.a = “123”
}
build(){
Column({space:20}){
// @ts-ignore
Text(this.data.a )
Button(“change”).onClick(()=>{
//@ts-ignore
this.data.a = “456”
})
}
}
}
但是这种写法一堆@ts-ignored,不太优雅了
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
API10之前还都可以,不过你既然在下面可以确定是有属性 a
,为什么不直接定义好,@State data: { a?: string } = {}
这样,
在HarmonyOS鸿蒙Next中,ArkTS支持Map对象作为状态变量。你可以使用@State
装饰器来声明一个Map类型的状态变量,并通过set
和get
方法对其进行操作。例如:
@State myMap: Map<string, number> = new Map();
这样,myMap
就可以作为状态变量在UI中使用了。