HarmonyOS 鸿蒙Next @Link的值变了,视图没有更新
可以了,看我标记的代码
更多关于HarmonyOS 鸿蒙Next @Link的值变了,视图没有更新的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
太神奇了,居然是ForEach
的后面的keyGenerator
去掉就可以了,这个不是用来增加循环效率的哇,加了数组修改居然受到了影响。
楼主,我也遇到了这个问题,最后的结论是什么?修改item中属性,可以刷新List吗?
new1
new2
🙂这样处理了下,
把id作为主键,只有修改id才会触发.
好的,明白了,
基本信息
姓名:张三
职位:软件工程师
技能:Java, Python, C++
工作经验
2018-2020: 软件开发实习生
公司:ABC科技有限公司
职责:参与项目需求分析,编写代码,进行单元测试。
2020-至今: 软件工程师
公司:XYZ科技有限公司
职责:负责项目整体架构设计,代码审核,团队技术培训。
我选建立一个临时的数组,再重新赋值按道理是可以呀
let tempList: Array<Todo> = this.todoItem.copyWithin(0, this.todoItem.length);
tempList.forEach((todo: Todo, index) => {
if (todo.id === item.id) {
tempList[index].status = !item.status;
this.todoItem = tempList;
}
});
而且值也变了,视图没有更新,
我总结一下,我换了一个思路,由父组件来循环下去,具体代码就是下面这样
其实这种才是正常的方法,list在父组件把item传递给子组件,然后子组件进行渲染。
但是我昨天看你的代码,感觉应该是没问题的。
https://gitee.com/kai-chen/learn-ark-ui.gith
±/$%-+看这个StatPassPage页面,
显示有问题
开放报名的课程
已选择的课程:
Java,C#,Arkts
这样就好了
我怎么不行呐,
基本信息
- 姓名: 张三
- 年龄: 28
- 职位: 开发者
技能
- Python
- Java
- C++
那要看下你改后的代码了,
那要看下你改后的代码了,
刚才简单用你的方式试了下,是可以的
可以在父组件打个日志看下数据是否更新
我图一下面的log就是变成ture了,已选择也更新了的,
我又测试了下,应该是赋值的问题,其实用的都是同一个地址。所以你在操作完之后又赋值回去还是那个对象,所以他不会重新刷新。这种应该要重新新建一个对象或者拷贝一个。
你的todoItem是咋定义的,我记得要用 @State
定义的,界面才会重新渲染。或者是不是不支持对象里属性变化。
但是在父组件的已选择的课程都更新了,子组件没有视图就没有更新,
你这个看着应该是没问题的,我差不多也这样用,不过我没套在对象里。
在HarmonyOS中,@Link
用于父子组件之间的双向数据绑定。如果@Link
的值发生了变化,但视图没有更新,可能是以下原因之一:
-
数据源未正确更新:
@Link
绑定的是父组件传递给子组件的数据。如果父组件中的数据源没有正确更新,子组件的视图也不会更新。 -
状态管理问题:如果使用了
@State
或@Provide
等状态管理装饰器,确保这些状态变量的更新能够正确触发视图的重新渲染。 -
组件生命周期:检查组件的生命周期方法,确保在数据变化时触发了组件的重新渲染。
-
数据绑定问题:确保
@Link
绑定的数据是响应式的,并且在数据变化时能够正确通知到子组件。 -
UI更新机制:鸿蒙的UI更新机制可能在某些情况下不会自动触发,可能需要手动调用
this.update()
来强制更新视图。 -
异步操作:如果数据变化发生在异步操作中,确保异步操作完成后能够正确触发视图更新。
-
组件层级问题:检查组件层级和父子关系,确保
@Link
绑定的数据能够正确传递到子组件。 -
框架版本问题:某些鸿蒙框架版本可能存在
@Link
绑定的Bug,建议检查并确认使用的是最新稳定版本。
如果以上问题都排除了,仍然无法解决,可以考虑使用@Watch
装饰器来监听@Link
的变化并手动触发视图更新。