HarmonyOS 鸿蒙Next @State customerTotal: number = 0; 值为什么不更新呢?

HarmonyOS 鸿蒙Next @State customerTotal: number = 0; 值为什么不更新呢?

我要在TitleBar中显示更新后的数据,实际情况缺失,接口已经获取到了数据,并且成功赋值,日志已经打印出来了

但是界面依然显示初始值0


更多关于HarmonyOS 鸿蒙Next @State customerTotal: number = 0; 值为什么不更新呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

总结下问题:是不是自定义Component不支持接收传递的 @State的变化的值

更多关于HarmonyOS 鸿蒙Next @State customerTotal: number = 0; 值为什么不更新呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


自定义Component是支持父组件@State标识变量变化,而更新子组件的,子组件接收参数变量前面可以添加@Prop@Link

谢谢提醒,

基本信息

  • 姓名: 张三
  • 年龄: 30
  • 职位: 开发工程师

TitleBar({ title: ‘逛地摊儿朋友圈儿(’+this.customerTotal+’)’, // leftIcon: $r(‘app.media.menu’), // leftTitle: ‘左侧侧滑页’, leftIcon: $r(‘app.media.menu’), leftTitle: “”, isShowLeft: true, leftClickEvent: () => { this.isSideBarSwitch = true; //显示左侧侧边栏 this.isShowSideBar = true; }, isShowRight: true, rightIcon: $r(‘app.media.loudou’), rightClickEvent: () => { this.isSideBarSwitch = false; //显示右侧侧边栏 this.isShowSideBar = true; } })

问题发现了,只要我用上边的自定义组件显示titleBar就会不能显示,我把自定义里的代码直接复制出来,就可以展示数字了

感谢您的反馈,如后期有疑问可以随时发帖,感谢您的支持。

是不是我自定义的组件,影响了显示

import router from '@ohos.router';
/**
 * 自定义标题栏
 */
@Component
export struct TitleBar {
  // 左边图标是否显示
  private isShowLeft = true
  //左边标题
  private leftTitle = '';
  // 左边图标
  private leftIcon = $r('app.media.back')
  // 左边点击事件,默认返回上一页
  private leftClickEvent = () => {
    router.back()
  }
  // 标题
  private title = '标题'
  // 右边图标是否显示
  private isShowRight = false
  // 右边图标
  private rightIcon = $r('app.media.icon')
  // 右边点击事件
  private rightClickEvent: () => void
  
  build() {
    Column() {
      Stack() {
        Text(this.title).fontSize(20).fontColor('#ff1a1a1a')
        Row() {
          if (this.isShowLeft) {
            Image(this.leftIcon).size({ width: 55, height: 55 }).padding(15)
              .onClick(() => this.leftClickEvent())
            Text(this.leftTitle)
              .size({ width: 100, height: 55 })
              .textAlign(TextAlign.Center) //文字居中
              .fontSize(14)
              .fontColor('#ff1a1a1a')
              .onClick(() => this.leftClickEvent())
          }
          Blank()
          if (this.isShowRight) {
            Image(this.rightIcon)
              .size({ width: 55, height: 55 })
              .padding(15)
              .onClick(this.rightClickEvent)
            // .margin(10)
          }
        }.width('100%')
      }.width('100%').height(0).layoutWeight(1)
      Divider().color('#ffbababa') //横向分割线
    }.width('100%').height(55)
  }
}

TitleBar是我自定义的

标题

  • 这里private title = ‘标题’ 修改为 @Prop title: string;

我试了下在 Button(this.customerTotal+'') 按钮的这里是可以正常显示接口返回的数字的,

在titleBar里却不能显示,这似乎是TitleBar的问题

在TitleBar里不能显示接口返回的数字

开发者您好,父子组件之间更新数据请参考界面状态管理,

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-prop.md

逛地摊儿朋友圈儿(0)

@State customerTotal: number = 0; //用户注册总数

cke_247.png

这个是SDK版本

在HarmonyOS(鸿蒙)开发中,如果你使用的是类似于React或Vue的声明式UI框架(比如ArkUI中的JS框架),@State 注解用于声明组件的状态变量,这些变量在变化时应该触发UI的重新渲染。如果你遇到 @State customerTotal: number = 0; 的值不更新的情况,可能的原因包括:

  1. 状态更新未触发:检查你修改 customerTotal 值的代码是否在组件的方法中正确执行,并且这些方法是否被正确调用。

  2. 异步数据处理:如果你在异步操作中更新 customerTotal(如网络请求后),确保更新操作在正确的生命周期或回调中进行,并且没有因为异步逻辑错误导致更新未被触发。

  3. 渲染条件限制:检查是否有条件渲染(如if语句)导致更新后的状态未被渲染到UI上。

  4. 框架或API使用错误:确认你使用的框架版本和API文档,确保没有误用API或遇到已知的框架bug。

  5. 编译器或运行时问题:极少数情况下,可能是IDE、编译器或运行时环境的问题,尝试重启开发环境或清理项目。

如果以上检查后问题依旧没法解决,请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部