HarmonyOS Observe的变量更新了,但是不会触发UI更新
Observe的变量更新了,但是不会触发UI更新。如下代码:通过 add,remove 按钮触发的数据变化,List 组件可以刷新,但是通过点击 ListItem 中的 Text.onClick 触发的数据变化,List 组件UI没有刷新。
@Entry
@Component
struct StatusPage {
@State config: TestConfig = new TestConfig()
build() {
Column({ space: 10 }) {
Text(this.config.sub.status)
.width('100%').backgroundColor(Color.Red)
.textAlign(TextAlign.Center)
Text(this.config.status)
.width('100%').backgroundColor(Color.Green)
.textAlign(TextAlign.Center)
List({ space: 5 }) {
ForEach(this.config.subList, (sub: SubConfig, index: number) => {
ListItem() {
Text(sub.status + ' 可点击删除')
.width('100%').height(50).backgroundColor(Color.Blue)
.textAlign(TextAlign.Center)
.onClick(() => {
this.config.removeIndex(index)
})
}
})
}
Button('add')
.onClick(() => {
this.config.add()
})
Button('remove')
.onClick(() => {
this.config.remove()
})
}
.width('100%').height('100%')
.justifyContent(FlexAlign.Center)
}
}
@Observed
class TestConfig {
sub: SubConfig = new SubConfig('0')
status: string = '0'
subList: SubConfig[] = []
add() {
this.status = (Number(this.status) + 1).toString()
this.sub.add()
this.subList.push(new SubConfig(this.status))
}
remove() {
this.status = (Number(this.status) - 1).toString()
this.sub.remove()
this.subList.splice(0, 1)
}
removeIndex(index: number) {
this.subList.splice(index, 1)
}
}
@Observed
class SubConfig {
status: string = '0'
constructor(status: string) {
this.status = status
}
add() {
this.status = (Number(this.status) + 1).toString()
}
remove() {
this.status = (Number(this.status) - 1).toString()
}
}
“this.config.removeIndex(index)”为什么不生效。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS eventHub只能从component发起触发UI更新?
222浏览 • 1回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
1638浏览 • 1回复 待解决
HarmonyOS Native怎么更新UI?
143浏览 • 1回复 待解决
HarmonyOS 提出来的组件数据不会更新
195浏览 • 1回复 待解决
callback无法成功更新UI
1847浏览 • 1回复 待解决
HarmonyOS 如何触发更新自定义组件里的数据并让其刷新UI?
433浏览 • 1回复 待解决
HarmonyOS State状态更新,触发相关的Component重新build内部的Component是如何更新的?
197浏览 • 1回复 待解决
HarmonyOS使用DataSource.notifyDataChange更新UI错误
466浏览 • 1回复 待解决
匿名内部类如何更新外部类的变量
1660浏览 • 0回复 待解决
HarmonyOS 为什么@Link的属性变更不会触发UI刷新?
157浏览 • 1回复 待解决
HarmonyOS Tabs TabContent 包含Page,该Page页如何触发更新
356浏览 • 1回复 待解决
HarmonyOS 自定义封装的组件列表更新服用UI问题
249浏览 • 1回复 待解决
更新了JS的SDK之后出现的问题怎么解决?
7514浏览 • 1回复 待解决
更新到鸿蒙,但是同花顺不能登录账户,想回到安卓,下载了华为助手,还是不行,求救
4284浏览 • 1回复 待解决
backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新
2142浏览 • 1回复 待解决
HarmonyOS @ObjectLink 装饰器装饰的变量成员子组件中无法感知更新
347浏览 • 1回复 待解决
异步回调更新数据源,无法触发列表渲染
2537浏览 • 2回复 待解决
服务卡片的更新方式?服务卡片更新不生效
3430浏览 • 0回复 待解决
HarmonyOS 可以通过其他类中的静态属性,更新本类中的UI吗?
132浏览 • 1回复 待解决
HarmonyOS应用更新demo
228浏览 • 1回复 待解决
HarmonyOS应用升级更新
793浏览 • 1回复 待解决
#鸿蒙学习大百科#UI的更新要经过几个过程?
162浏览 • 1回复 待解决
字段资源转换在aboutToAppear()中,但是切换中英文后,相关的字段没有及时更新渲染,应该如何触发重新渲染
1626浏览 • 1回复 待解决
设置新数据后,界面未更新,通过滑动界面能触发其界面更新。数据其实已经设置成功
705浏览 • 1回复 待解决
使用EventHub通信接收到消息后更新@States装饰的变量布局刷新
810浏览 • 1回复 待解决
1this.config.removeIndex(index)修改的是this.config.subList的属性值,对于this.config.subList并没有用状态装饰器修饰,所以变化无法引起UI刷新。TestConfig的add和remove方法之所以能生效,是因为里面修改了status属性。而在StatusPage中TestConfig又用@State修饰了,这会导致status属性变化了之后能监听到变化,触发了UI刷新这个不是BUG,@Observed的用法可参考文档,文档中已表明:单独使用@Observed是没有任何作用的,需要搭配@ObjectLink或者@Prop使用。