HarmonyOS 状态变量不刷新问题
下面这段代码在点击每个Item删除数组元素时,问什么没刷新到UI上。
//状态变量问题
class Article {
id: string;
title: string;
brief: string;
constructor(id: string, title: string, brief: string) {
this.id = id;
this.title = title;
this.brief = brief;
}
}
class Arrtest{
articleList: Array<Article> = [
new Article('001', '第1篇文章', '文章简介内容'),
new Article('002', '第2篇文章', '文章简介内容'),
new Article('003', '第3篇文章', '文章简介内容'),
new Article('004', '第4篇文章', '文章简介内容'),
new Article('005', '第5篇文章', '文章简介内容'),
new Article('006', '第6篇文章', '文章简介内容')
]
}
@Entry
@Component
struct ArticleListView {
@State isListReachEnd: boolean = false;
@State arrtest: Arrtest = new Arrtest()
build() {
Column({ space: 5 }) {
Flex() {
ForEach(this.arrtest.articleList, (item: Article, index: number) => {
ListItem() {
this.articleCard(index)
}
}, (item: Article) => item.id)
}
.padding(20)
}
.width('100%')
.height('100%')
.backgroundColor(0xF1F3F5)
}
@Builder
articleCard(index: number) {
Row() {
Column() {
Text('test')
.fontSize(20)
.margin({ bottom: 8 })
}
.alignItems(HorizontalAlign.Start)
.width('80%')
.height('100%')
}
.padding(20)
.borderRadius(12)
.backgroundColor('#FFECECEC')
.height(120)
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.onClick(() => {
this.arrtest.articleList?.splice(index, 1)
})
}
}
HarmonyOS
赞
收藏 0
回答 2
待解决
相关问题
HarmonyOS constraintSize支持状态变量?
0浏览 • 1回复 待解决
HarmonyOS 状态变量更新及其@watch监听问题
29浏览 • 1回复 待解决
如何将界面上的状态变量传给服务层,在服务层修改状态变量对象的属性刷新页面
657浏览 • 1回复 待解决
状态变量和常规变量有什么区别?
495浏览 • 2回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
1754浏览 • 1回复 待解决
HarmonyOS hidumper查看状态变量关联的组件数
43浏览 • 1回复 待解决
HarmonyOS zIndex能否通过状态变量来更新
34浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
1032浏览 • 1回复 待解决
HarmonyOS 每个页面相同的状态变量如何封装?
367浏览 • 1回复 待解决
HarmonyOS 外部类方法如何改变组件状态变量
39浏览 • 1回复 待解决
关于状态变量@state必须知道的事
1202浏览 • 1回复 待解决
#鸿蒙学习大百科#状态变量的变化何时会触发UI刷新?
270浏览 • 1回复 待解决
HarmonyOS UI不刷新问题
30浏览 • 1回复 待解决
HarmonyOS 装饰器不刷新问题
227浏览 • 1回复 待解决
基于滑动监听和状态变量实现滑动时取消按压态
755浏览 • 1回复 待解决
@Provide的状态变量,是否可以观察多层嵌套的属性?
880浏览 • 1回复 待解决
HarmonyOS Navigtion组件,两个NavDestination之间如何同步状态变量
407浏览 • 1回复 待解决
HarmonyOS @Builder函数接收的状态变量未引起内部ui变化
68浏览 • 1回复 待解决
#鸿蒙学习大百科#在ArkUI中,什么是状态变量?
255浏览 • 1回复 待解决
HarmonyOS @Watch可以观察到@Consume装饰的状态变量更改吗
65浏览 • 1回复 待解决
HarmonyOS @Require 修饰的无状态变量必须要给初始默认值?
185浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中使用@Watch装饰器监听状态变量变化?
143浏览 • 1回复 待解决
backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新
2257浏览 • 1回复 待解决
#鸿蒙通关秘籍# 鸿蒙应用开发时如何优化状态变量的使用,避免不必要的组件刷新以提升性能?
78浏览 • 0回复 待解决
#鸿蒙通关秘籍#怎样在ArkTS中使用@Watch装饰器监听状态变量的变化?
245浏览 • 1回复 待解决
在 HarmonyOS 中,如果状态变量的更改没有正确地刷新 UI,很可能是因为状态管理或者数据绑定的问题。你的代码中,使用了
@State
装饰器来声明状态变量,但操作数组的方法可能没能通知框架当前状态发生了变化。## 问题分析
### 1. 数组操作 直接操作数组(如
splice
)不会触发对整个对象属性的变动通知。框架可能无法检测到数组内容的变化,从而不重新渲染组件。### 2. 确保状态更新 需要确保每次更改数组数据时,能够通知框架状态已经改变。
## 改进方法
### 使用
@State
和 @Link
@State
@Link
### 示例代码
以下是如何改进你的代码,以确保在删除数组元素时能够正确地刷新 UI:
### 关键点解释:
...
创建一个数组的副本。splice
操作,这样可以避免原数组的直接修改。this.arrtest.articleList
。通过这种方式,可以确保状态变量的更改能够被框架正确检测到,从而刷新 UI。如果有进一步的问题或特殊需求,请随时提问。
可参考如下关键代码: