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

6 回复

这个官方有给解决方案吗?同样遇到了,华为工程师谁能给解答一下????

更多关于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类型的状态变量,并通过setget方法对其进行操作。例如:

@State myMap: Map<string, number> = new Map();

这样,myMap就可以作为状态变量在UI中使用了。

回到顶部