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更新?
347浏览 • 1回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
1718浏览 • 1回复 待解决
HarmonyOS 使用@builder和@builderParam时,@builder中的ui不会动态更新
314浏览 • 1回复 待解决
HarmonyOS Native怎么更新UI?
241浏览 • 1回复 待解决
HarmonyOS 在定时器里面改变@state修饰的变量,无法更新UI吗?
11浏览 • 1回复 待解决
callback无法成功更新UI
1948浏览 • 1回复 待解决
HarmonyOS 如何触发更新自定义组件里的数据并让其刷新UI?
878浏览 • 1回复 待解决
HarmonyOS State状态更新,触发相关的Component重新build内部的Component是如何更新的?
297浏览 • 1回复 待解决
HarmonyOS 提出来的组件数据不会更新
385浏览 • 1回复 待解决
匿名内部类如何更新外部类的变量
1764浏览 • 0回复 待解决
HarmonyOS使用DataSource.notifyDataChange更新UI错误
680浏览 • 1回复 待解决
HarmonyOS Tabs TabContent 包含Page,该Page页如何触发更新
535浏览 • 1回复 待解决
更新了JS的SDK之后出现的问题怎么解决?
7638浏览 • 1回复 待解决
HarmonyOS 自定义封装的组件列表更新服用UI问题
329浏览 • 1回复 待解决
HarmonyOS 为什么@Link的属性变更不会触发UI刷新?
354浏览 • 1回复 待解决
更新到鸿蒙,但是同花顺不能登录账户,想回到安卓,下载了华为助手,还是不行,求救
4474浏览 • 1回复 待解决
HarmonyOS 关于数组中class更改,List不触发更新问题
132浏览 • 1回复 待解决
HarmonyOS Scroll 横向滑动时根据滑动的距离触发视图不更新
120浏览 • 1回复 待解决
HarmonyOS 更新APP必须在应用市场更新吗?
235浏览 • 1回复 待解决
HarmonyOS 应用更新
72浏览 • 1回复 待解决
backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新
2225浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何动态更新深色模式的UI布局?
76浏览 • 1回复 待解决
HarmonyOS @ObjectLink 装饰器装饰的变量成员子组件中无法感知更新
472浏览 • 1回复 待解决
字段资源转换在aboutToAppear()中,但是切换中英文后,相关的字段没有及时更新渲染,应该如何触发重新渲染
1774浏览 • 1回复 待解决
异步回调更新数据源,无法触发列表渲染
2760浏览 • 2回复 待解决
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使用。