HarmonyOS @State修饰@observed装饰的对象, 对象里的数组改变, 不会触发ui刷新
@Preview
@Component
export struct OvenDemePage {
@State vm: VM = new VM([])
aboutToAppear(): void {
this.vm.push()
}
build() {
NavDestination() {
Column() {
Text('click')
.fontSize(50)
.onClick(() => {
this.vm.datas[0].title = 'ovnekjskdaljfa'
this.vm.push()
})
}.height(Percent.P20)
.justifyContent(FlexAlign.Center)
List({ space: 10 }) {
ForEach(this.vm.datas, (item: Item, index: number) => {
ListItem() {
JJJ({ data: item })
}
}, (item: Item, index: number) => index + "")
}.layoutWeight(1)
}.hideTitleBar(true)
.onBackPressed(() => {
DeepalRouter.pop()
return true
})
}
}
@Preview
@Component
export struct JJJ {
@ObjectLink data: Item
build() {
Text(this.data.title).fontSize(30)
}
}
/**
*
*/
@Observed
export class VM {
datas: Item[] = []
constructor(datas: Item[]) {
this.datas = datas
}
push() {
for (let i = 0; i < 10; i++) {
this.datas.push(new Item(Math.random() + " title"))
}
}
}
/**
* item
*/
@Observed
export class Item {
title?: string
constructor(title: string) {
this.title = title
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
HarmonyOS
赞
收藏 0
回答 1
相关问题
使用@State修饰的数组对象,改变其中的某个对象的变量,自定义组件中的UI没有跟着刷新
1359浏览 • 1回复 待解决
HarmonyOS @State可以修饰对象数组
353浏览 • 1回复 待解决
HarmonyOS @state可以修饰对象数组么
340浏览 • 1回复 待解决
HarmonyOS 对象数组在@state修饰时,对象属性变化界面不刷新的解决办法
443浏览 • 1回复 待解决
HarmonyOS ObjectLink修饰符对象的属性改变不能引起UI刷新
826浏览 • 1回复 待解决
HarmonyOS 关于对象数组内容变更不会引起UI刷新
919浏览 • 0回复 待解决
HarmonyOS @State修饰的数组内部的值变化了,怎么刷新UI?
1042浏览 • 1回复 待解决
HarmonyOS 非UI类中改变State装饰属性,无法触发UI渲染
711浏览 • 1回复 待解决
HarmonyOS 对象A数组,对象A中又嵌套一个对象B数组,修改B中的属性UI,不刷新
1033浏览 • 1回复 待解决
@Observed中的数组变化无法触发界面刷新
1489浏览 • 1回复 待解决
HarmonyOS @Observed装饰的类,构造了对象数组,那这个数组中对象的属性变化之后,能引起视图的更新吗
1562浏览 • 1回复 待解决
@State 修饰的变量值改变,界面不刷新
2106浏览 • 1回复 待解决
HarmonyOS 数组对象数据刷新
466浏览 • 1回复 待解决
ForEach数组发生改变。UI没刷新
1230浏览 • 1回复 待解决
HarmonyOS @State修饰的Array<Object>修改对象的属性,单个item的页面数据没刷新。
362浏览 • 1回复 待解决
HarmonyOS 对象数组在使用@Observed和@ObjectLink驱动子组件UI更新时的问题
676浏览 • 1回复 待解决
HarmonyOS 在定时器里面改变@state修饰的变量,无法更新UI吗?
592浏览 • 1回复 待解决
HarmonyOS @State刷新不了数组里面包含类的字段刷新UI
316浏览 • 1回复 待解决
HarmonyOS @State修饰的ResourceStr内容在变更的时候较大几率不会响应UI的变换
246浏览 • 1回复 待解决
HarmonyOS HashMap中放入数组,数组数据发生改变时如增加或者删除元素,如何触发UI刷新
292浏览 • 1回复 待解决
HarmonyOS LazyForEach不会更新@State里的值
474浏览 • 1回复 待解决
@State修饰的对象通过传参给子组件,子组件不刷新,获取的值为空
2381浏览 • 1回复 待解决
HarmonyOS 使用MVVM模式开发APP,使用@Observed装饰对象,观测变化时只能观测完整对象,难以实现局部刷新
939浏览 • 1回复 待解决
HarmonyOS 为什么@Link的属性变更不会触发UI刷新?
845浏览 • 1回复 待解决
HarmonyOS 背景渐变色linearGradient怎么通过@State里定义的对象动态取值动态改变渐变色
279浏览 • 1回复 待解决
因为@Observed装饰器可以观察到嵌套对象的属性变化,其他装饰器仅能观察到第二层的变化。需要将具有观测能力的类对象绑定组件,来确保当改变这些类对象的内容时,UI能够正常的刷新(New一个继承了Array的对象而不是自定义数组)。具体参考如下链接,里面列举了几种失效场景,并提供了正确的写法。
相关文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-256-V5