HarmonyOS jscrash,代码报Error message:is not callable

@Entry()
@ComponentV2
struct Index {
  vm = new ViewModel()

  build() {
    Column() {
      Row() {
        ForEach(this.vm.names, (item: string, index: number) => {
          Column() {
            PersonComponent({
              name: item,
              color: index == this.vm.currentIndex ? Color.Red : Color.Blue
            })
            // 下面这个版本不崩溃
            // if (this.vm.currentIndex == index) {
            //   PersonComponent({
            //     name: item,
            //     color: Color.Red
            //   })
            // } else {
            //   PersonComponent({
            //     name: item,
            //     color: Color.Blue
            //   })
            // }
          }.onClick(() => {
            this.vm.currentIndex = index
          })
        })
      }.alignItems(VerticalAlign.Center).height('100%')
    }.alignItems(HorizontalAlign.Center).width('100%')
  }
}

@ComponentV2
struct PersonComponent {
  name: string = ''
  color: ResourceColor = Color.Blue
  build() {
    Column() {
      Shape() {
        Circle().width(50).height(50).fill(this.color).strokeOpacity(0)
      }.width(50).height(50)

      Text(this.name)
    }
  }
}

@ObservedV2
class ViewModel {
  @Trace names = ['Alice', 'Bob', 'Charles', 'David', 'Eve']
  @Trace currentIndex = 0
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

@Track是class对象的属性装饰器。当一个class对象是状态变量时,@Track装饰的属性发生变化,只会触发该属性关联的UI更新;而未被标记的属性不能在UI中使用。

代码示例中的color、name未被@Track修饰,无法导致UI刷新,故会导致jscrash。

正确用法,类似于在ForEach的Column中直接刷新UI,例如Text(“索引” + this.vm.currentIndex)

参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-track-V5

分享
微博
QQ
微信
回复
2天前
相关问题
冷启动报错Error message
2140浏览 • 1回复 待解决
app启动crash报错Error message:MainPage:
1816浏览 • 1回复 待解决
HarmonyOS ESObjectWARN
495浏览 • 1回复 待解决