HarmonyOS 鸿蒙Next @State修饰的number仅用于圆角时,变量改变但UI不刷新

HarmonyOS 鸿蒙Next @State修饰的number仅用于圆角时,变量改变但UI不刷新 代码如下,log输出的imageRadius随滑条实时改变,但UI中的圆角不更新,取消Text的注释,将imageRadius直接显示时,UI正常更新,为什么

.borderRadius(this.imageRadius)无法触发UI更新?求指点

@Entry
@Component
struct Index {
  [@State](/user/State) imageRadius: number = 100
  [@State](/user/State) imageWidth: number = 150

  build() {
    Column() {
      Column() {
        // Text(this.imageRadius.toFixed())
        //   .fontSize(50)
        //   .fontWeight(FontWeight.Bold)
        Image($r('app.media.icon'))
          // Image($rawfile('1.jpg'))
          .width(this.imageWidth)
          .borderRadius(this.imageRadius)
          .interpolation(ImageInterpolation.High)
          .margin(20)
      }.height('50%')
      .justifyContent(FlexAlign.Start)

      TextInput({ placeholder: '10' })
        .width('60%')
        .onChange((value: string) => {
          this.imageRadius = parseInt(value)
        })
      Row() {
        Button("缩小")
          .margin(20)
          .onClick(() => {
            this.imageRadius = 0
          })
        Button("放大")
          .margin(20)
          .onClick(() => {
            this.imageRadius = 50
          })
      }

      Slider({
        min: 0,
        max: 100,
        value: this.imageRadius,
        step: 1,
        style: SliderStyle.OutSet,
        direction: Axis.Horizontal,
        reverse: false
      })
        .width("80%")
        .showTips(true)
        .blockColor('#03E')
        .onChange(value => {
          this.imageRadius = value
          console.log(this.imageRadius.toFixed())
        })

    }
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next @State修饰的number仅用于圆角时,变量改变但UI不刷新的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

问题已解决,需要给Image同时设置width和height属性

更多关于HarmonyOS 鸿蒙Next @State修饰的number仅用于圆角时,变量改变但UI不刷新的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


圆角的值后边添加一个空字符串 ‘’, 尝试一下,Text控件只能设置字符串内容,

大概是Image组件的边框属性不会触发图片重新加载,

在HarmonyOS中,@State装饰器用于标记组件的状态变量,当状态变量发生变化时,UI会自动刷新。然而,如果@State修饰的number变量仅用于设置圆角,且变量改变后UI未刷新,可能是以下原因:

  1. 未触发UI更新@State仅在其值发生变化时触发UI更新。如果number的值未实际改变,UI不会刷新。确保number的值确实发生了变化。

  2. 圆角属性未绑定:圆角属性(如borderRadius)可能未正确绑定到number变量。确保圆角属性使用了number变量,例如:borderRadius: this.number

  3. UI更新机制:鸿蒙的UI更新机制依赖于状态变量的变化。如果number的变化未触发UI更新,可能需要在组件的build方法中显式使用number变量,以确保UI重新渲染。

  4. 状态管理范围:如果number变量在子组件中使用,确保父组件的状态变化能够传递到子组件。可以使用@Link@Prop装饰器在父子组件之间传递状态。

  5. 组件生命周期:检查组件生命周期方法(如aboutToAppearaboutToDisappear)是否影响了number变量的更新或UI的刷新。

确保number变量的变化确实触发了UI更新,并且圆角属性正确绑定了该变量。

回到顶部