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
待解决
相关问题
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
1429浏览 • 1回复 待解决
HarmonyOS使用DataSource.notifyDataChange更新UI错误
140浏览 • 1回复 待解决
callback无法成功更新UI
1636浏览 • 1回复 待解决
匿名内部类如何更新外部类的变量
1370浏览 • 0回复 待解决
HarmonyOS 自定义封装的组件列表更新服用UI问题
88浏览 • 1回复 待解决
更新了JS的SDK之后出现的问题怎么解决?
7143浏览 • 1回复 待解决
HarmonyOS @ObjectLink 装饰器装饰的变量成员子组件中无法感知更新
121浏览 • 1回复 待解决
HarmonyOS Grid组件使用ForEach网格布局,Ui数据更新问题
149浏览 • 1回复 待解决
backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新
1861浏览 • 1回复 待解决
更新到鸿蒙,但是同花顺不能登录账户,想回到安卓,下载了华为助手,还是不行,求救
3996浏览 • 1回复 待解决
异步回调更新数据源,无法触发列表渲染
2128浏览 • 2回复 待解决
使用EventHub通信接收到消息后更新@States装饰的变量布局刷新
585浏览 • 1回复 待解决
设置新数据后,界面未更新,通过滑动界面能触发其界面更新。数据其实已经设置成功
477浏览 • 1回复 待解决
字段资源转换在aboutToAppear()中,但是切换中英文后,相关的字段没有及时更新渲染,应该如何触发重新渲染
1304浏览 • 1回复 待解决
服务卡片的更新方式?服务卡片更新不生效
3121浏览 • 0回复 待解决
HarmonyOS 获取当前应用的图标 实时更新
109浏览 • 1回复 待解决
使用onDataChange更新数据是否会更新关联项
1627浏览 • 1回复 待解决
30s怎么更新什么时候更新
6546浏览 • 1回复 待解决
服务器更新了证书之后http请求报错2300060
62浏览 • 1回复 待解决
HarmonyOS WrappedBuilder的使用。如何动态更新全局@Builder
142浏览 • 1回复 待解决
HarmonyOS Grid容器视图更新问题
122浏览 • 1回复 待解决
客户端更新升级功能,可以应用内更新吗
1641浏览 • 1回复 待解决
HarmonyOS bindContextMenu绑定的组件在有更新数据时会消失
116浏览 • 1回复 待解决
HarmonyOS是否允许应用内部提醒强制更新
87浏览 • 1回复 待解决
卡片开发模式,卡片更新时,数据量稍大些,无法更新
6653浏览 • 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使用。