HarmonyOS 鸿蒙Next:Observed 一个 class,其中有个 数组,修改数组 UI 不变化
HarmonyOS 鸿蒙Next:Observed 一个 class,其中有个 数组,修改数组 UI 不变化
我是根据教程 MVVM 的例子,在写代码。https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-mvvm-V5#%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B
做到最后,把planList 拿了出去,创建了一个类。这个例子还是没问题的。
我自己,多加了一个按钮,在点击 Add 的时候,给 数组里继续 push 字符串,这时候 UI 就不变化了。
但是如果直接用 [@State](/user/State) planList: string[] = [...] 这样是OK的。
请教大家这个要怎么处理?才能让 Observed 和 State 生效。
[@Observed](/user/Observed)
export class TodoListData {
public planList: string[] = [
'7.30 起床',
'8.30 早餐',
'11.30 中餐',
'17.30 晚餐',
'21.30 夜宵',
'22.30 洗澡',
'1.30 起床'
];
}
[@State](/user/State) private data: TodoListData = new TodoListData()
....
List() {
ForEach(this.data.planList, (item: string) => {
ThingsComponent({ isFinished: this.isFinished, things: item }).margin({ top: 5 })
})
}
...
Button("Add")
.margin({ top: 10 })
.onClick(() => {
if (this.newPlan) {
this.data.planList.push(this.newPlan)
this.newPlan = ''
}
})
在 this.data.planList.push(this.newPlan) 后面增加一句话
this.data.planList=[...this.data.planList]
感谢回答,解决了。 想问下原因是? ArkTs 的 响应式,检测不到数组的 push 么? 有什么文档说明这个问题么?
在HarmonyOS鸿蒙Next的开发环境中,如果你观察到修改数组后UI没有变化,这通常是由于数据绑定未正确更新或者数组本身的引用没有变化导致的。
-
确保使用可观察的数据结构:在HarmonyOS中,如果你希望UI能响应数据变化,应使用支持数据绑定的数据结构,如
ObservableList
或自定义的Observable对象。 -
数组引用变更:如果你直接修改了数组的内容(如通过索引赋值)而不是替换整个数组引用,UI可能不会刷新。尝试创建一个新的数组实例,并用新值填充,然后将其赋值给原来的数组变量。
-
UI组件的数据绑定:检查你的UI组件是否正确绑定了数据。使用
@Link
注解或类似的机制确保UI组件能够响应数据变化。 -
通知机制:如果使用的是自定义的Observable对象,确保在数据变化时调用了相应的通知方法,如
notifyPropertyChanged
。 -
调试与日志:增加日志输出,检查数据是否真的被修改,以及UI是否收到了更新通知。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html