HarmonyOS Repeat无法正确刷新

在Repeat里如果使用@Builder,更新数据源时无法正确刷新,ForEach就可以。下面代码可以稳定复现,点击Button后,只有Repeat里的builder显示错误。

// xxx.ets

@ObservedV2
class HomeState {
  @Trace tabs: string[] = ['1']
}

@Entry
@ComponentV2
struct RepeatBugExample {
  @Local state = new HomeState()
  build() {
    Column({space: 20}) {
      Button('change state')
        .onClick(() => {
          this.state.tabs[0] = '3'
        })
      Column({space: 4}) {
        Repeat(this.state.tabs).each((e) => {
          Text(`Repeat: ${e.item}`)
          buildText(`Use builder in Repeat: ${e.item}`)
        })
        ForEach(this.state.tabs, (e:string) => {
          Text(`ForEach: ${e}`)
          buildText(`Use builder in ForEach: ${e}`)
        })
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }

  renderLog(name: string) {
    console.log(`log ${name}`)
    return 1
  }
}

@Builder
function buildText(name: string) {
  Text(name)
}
HarmonyOS
2025-01-09 16:19:44
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

可以使用以下方式:

@ObservedV2
class HomeState {
  @Trace tabs: string[] = ['1']
}

@Entry
@ComponentV2
struct RepeatBugExample {
  @Local state = new HomeState()
  build() {
    Column({space: 20}) {
      Button('change state')
        .onClick(() => {
          this.state.tabs[0] = '3'
        })
      Column({space: 4}) {
        Repeat(this.state.tabs).each((e) => {
          Text(`Repeat: ${e.item}`)
          buildText(e)
        })
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }

  renderLog(name: string) {
    console.log(`log ${name}`)
    return 1
  }
}

@Builder
function buildText(e: RepeatItem<string>) {
  Text(`Use builder in Repeat: ${e.item}`)
}
分享
微博
QQ
微信
回复
2025-01-09 18:26:05
相关问题
HarmonyOS 无法正确生成
760浏览 • 1回复 待解决
HarmonyOS Navigation无法正确显示
844浏览 • 1回复 待解决
HarmonyOS 平板无法正确横竖屏切换
1232浏览 • 1回复 待解决
HarmonyOS tab组件无法刷新
968浏览 • 1回复 待解决
HarmonyOS 列表多选页面无法刷新
888浏览 • 1回复 待解决
HarmonyOS px2vp在模拟器上无法正确转换
1711浏览 • 1回复 待解决
HarmonyOS 如何正确使用LazyForEach?
894浏览 • 1回复 待解决
HarmonyOS so库的正确引用方式
1223浏览 • 1回复 待解决
jsBridge中如何正确使用this
1362浏览 • 1回复 待解决
HarmonyOS 如何正确配置应用图标
2158浏览 • 1回复 待解决
HarmonyOS 如何正确的打印对象?
1077浏览 • 1回复 待解决
HarmonyOS 正则匹配want如何正确填写host
1362浏览 • 1回复 待解决