backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新

backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新

HarmonyOS
2024-02-20 10:43:54
3078浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
开心的兔子

可尝试通过watch监听或者使用backgroungdImage()。

示例代码

@Entry 
@Component 
struct Page2 { 
  @State @Watch('showImg') isShowImg: boolean = true; 
 
  aboutToAppear() { 
    this.showTimer() 
  } 
 
  @Builder 
  showImg() { 
    Image($r('app.media.app_icon')).width(20).height(30) 
  } 
 
  @Builder 
  showDefaultImg() { 
    Image($r('app.media.image1')).width(200).height(30) 
  } 
 
  showTimer() { 
    setTimeout(() => { 
      this.isShowImg = false; 
    }, 5000) 
  } 
 
  build() { 
    Column() { 
      Text('Hello world') 
        .width(200) 
        .height(30) 
        .background(this.isShowImg ? this.showImg() : this.showDefaultImg()) // 状态变量更新可触发UI渲染 
      // .background(this.showImg()) // 状态变量更新不能触发UI渲染 
      // .backgroundImage(this.isShowImg? $r('app.media.icon') : r('app.media.image1')) // 状态变量更新可以触发UI渲染 .onClick(() => { console.info(`click isShowImg:{this.isShowImg}`) // 开始时点击isShowImg为true,5s后点击为false 
    } 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
分享
微博
QQ
微信
回复
2024-02-20 19:51:04


相关问题
@State 修饰变量值改变,界面不刷新
2543浏览 • 1回复 待解决
关于状态变量@state必须知道
2203浏览 • 1回复 待解决
HarmonyOS 状态变量刷新问题
1604浏览 • 1回复 待解决
HarmonyOS constraintSize支持状态变量
956浏览 • 1回复 待解决
HarmonyOS 修改变量值
565浏览 • 1回复 待解决
如何监听Viewmodel里变量值变化
2603浏览 • 1回复 待解决
ArkTS中如何监听状态变量变化?
2001浏览 • 1回复 待解决
状态变量和常规变量有什么区别?
1272浏览 • 2回复 待解决