HarmonyOS @Builder嵌套二层传递状态变量无法识别

Row() {
  this.StudentInfo(this.school ? this.school : '填写学校', this.school === '' && this.grade !== '', () => {
    SolarRouter.pushPath(LocalPages.SCHOOL_SETTING_PAGE)
  })
}
.margin({ top: 8, right: 6 })
.visibility(this.loginState ? Visibility.Visible : Visibility.Hidden)

}.alignItems(HorizontalAlign.Start)
}
@Builder
StudentInfo(info: string, visible: boolean, onClick: () => void) {
  Row() {
    Text(info)
      .fontSize(11)
      .fontColor('#FF909090')
    Image($r('app.media.icon_my_fill_info_arrow'))
      .width(6)
      .width(6)
      .margin({ left: 2 })
      .interpolation(ImageInterpolation.High)
      .visibility(info === '去填写年级' || info === '填写学校' ? Visibility.Visible : Visibility.Hidden)
  }.margin({ left: 6 }).onClick(onClick)
  .visibility(visible ? Visibility.Visible : Visibility.Hidden)
}

如上代码,this.school是状态变量,当其变化的时候StudentInfo不会更新,希望可以支持。

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

参考demo:

import web_webview from '@ohos.web.webview'
class Tmp {
  info: string = ''
  visible: boolean = false
  onClick: () => void = ()=>{}
}
@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  responseweb: WebResourceResponse = new WebResourceResponse()
  heads: Header[] = new Array()
  @State school: string = "北京大学"
  @Builder
  StudentInfo(param: Tmp) {
    Row() {
      Text(param.info)
        .fontSize(30)
        .fontColor('#FF909090')
      Image($r('app.media.startIcon'))
        .width(56)
        .width(56)
        .margin({ left: 2 })
        .interpolation(ImageInterpolation.High)
    }.margin({ left: 6 }).onClick(param.onClick)
    .visibility(param.visible ? Visibility.Visible : Visibility.Hidden)
  }
  build() {
    Column() {
      Row() {
        this.StudentInfo({info:this.school,visible:this.school !== '' ,onClick:() => {
            console.log('点击打印')
          }})
      }
    }
    .alignItems(HorizontalAlign.Start)
    .size({width:'100%',height:'100%'})
    .backgroundColor(Color.Green)
    .onClick(()=>{
      this.school = this.school === '' ? '北京大学' : ''
    })
  }
}

Builder的参数引用传递需要满足:只有传入一个参数,且参数需要直接传入对象字面量才会按引用传递该参数,其余传递方式均为按值传递。可以参考如下链接查看完整规则:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#参数传递规则

分享
微博
QQ
微信
回复
7天前
相关问题
HarmonyOS 状态变量不刷新问题
563浏览 • 1回复 待解决
HarmonyOS constraintSize支持状态变量
137浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
1106浏览 • 1回复 待解决
关于状态变量@state必须知道的事
1297浏览 • 1回复 待解决
HarmonyOS 需要pullToRefresh二层楼demo示例
434浏览 • 1回复 待解决
状态变量和常规变量有什么区别?
587浏览 • 2回复 待解决