HarmonyOS 鸿蒙Next 响应式没反应

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 响应式没反应

这是class

@Observed
export class ScreenshotObj{
path:string = ‘’
didClicked:boolean = false
isSelect: boolean = false
}

------------------------------------------------------------------

这是component
 

@Component
export struct ImageGridItemComponent {
/// 左边的index,切换时显示不同type 的item
@Consume(‘menuFocus’) menuFocus: number
// 视图中列表部分创建一个新的组件ListDataView,用ObjectLink接受数据。
@ObjectLink item: ScreenshotObj
@Link editState: boolean
@Link flag: boolean

build() {
RelativeContainer() {
Image(‘file://’ + this.item.path)
.alignRules({
left: { anchor: ‘container’, align: HorizontalAlign.Start },
right: { anchor: ‘container’, align: HorizontalAlign.End },
top: { anchor: ‘container’, align: VerticalAlign.Top },
bottom: { anchor: ‘container’, align: VerticalAlign.Bottom },
})
.objectFit(ImageFit.Cover)
.borderRadius(10)
.borderWidth(this.editState ? 2 : 0)
.borderColor(this.editState ? Color.Red : Color.Transparent)

Text(‘最新’)
.textAlign(TextAlign.Center)
.width(40)
.height(16)
.borderRadius(1000)
.fontColor(’#FFFFFF’)
.fontSize(10)
.backgroundColor(’#FF0000’)
.visibility(this.item.didClicked ? Visibility.Hidden : Visibility.Visible)
.alignRules({
right: { anchor: ‘container’, align: HorizontalAlign.End },
top: { anchor: ‘container’, align: VerticalAlign.Top },
})

// check_box_unselect check_box_select
Image(this.item.isSelect ? $r(‘app.media.check_box_select’) : $r(‘app.media.check_box_unselect’))
.alignRules({
right: { anchor: ‘container’, align: HorizontalAlign.End },
top: { anchor: ‘container’, align: VerticalAlign.Top },
})
.margin({
top: 4, right: 5
})
.width(16)
.visibility(this.editState ? Visibility.Visible : Visibility.Hidden)
.onClick(() => {
this.item.isSelect = !this.item.isSelect
emitter.emit({
eventId: RECODE_EVENT,
priority: emitter.EventPriority.HIGH
})
})

}
.width(‘100%’)
.height(‘100%’)
}

}

------------------------------------------------------------------

这个page的ui构建

ForEach(this.screenshotDatas, (item: ScreenshotObj, index: number) => {
GridItem() {
ImageGridItemComponent({
editState: this.editState,
item:item,
flag:this.flag /// 强制刷新也起不来作用
})
.width(‘100%’)
.height(90)
}
.scale({
x: index === this.optionFocus ? 1.1 : 1,
y: index === this.optionFocus ? 1.1 : 1,
})
.onClick(() => {
if (this.optionFocus === index) {
this.onA()
}
this.optionFocus = index
})
.animation({
duration: 200,
curve: Curve.EaseOut
})
}, (item: ScreenshotObj) => item.path)

我有一个fn

 fn(){

this.screenshotDatas[this.optionFocus].isSelect = !this.screenshotDatas[this.optionFocus].isSelect
this.screenshotDatas.forEach(item=>console.warn(11111 item:${item.isSelect}))
this.xKey = this.screenshotDatas[this.optionFocus].isSelect ? ‘取消选择’ : '选择’
this.flag = !this.flag

}

为什么在page里面的screenshotDatas的item已经改变,而component里面的item没有改变?


更多关于HarmonyOS 鸿蒙Next 响应式没反应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
方便提供一个可复现的最小化demo吗,用您现在提供的代码不太容易复现问题

更多关于HarmonyOS 鸿蒙Next 响应式没反应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的HarmonyOS 鸿蒙Next响应式没反应的问题,以下是一些可能的解决方案:

  1. 检查系统更新

    • 确保您的鸿蒙系统已更新到最新版本。新版本可能修复了旧版本中的响应性问题。
  2. 重启设备

    • 尝试重启您的鸿蒙设备,这有助于解决临时性的软件故障。
  3. 清理内存

    • 检查并清理设备的内存和存储空间,过多的后台应用或缓存可能导致系统响应变慢。
  4. 检查应用兼容性

    • 如果您在使用特定应用时遇到响应问题,请检查该应用是否与鸿蒙Next系统兼容。
  5. 恢复出厂设置

    • 在备份重要数据后,尝试将设备恢复出厂设置,以排除因系统设置或配置问题导致的响应性故障。
  6. 检查硬件问题

    • 排除软件因素后,若问题依旧存在,请检查设备是否存在硬件故障,如触摸屏失灵等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。请提供详细的设备信息和问题描述,以便客服人员为您提供更具体的帮助。

回到顶部