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支持状态变量?
763浏览 • 1回复 待解决
HarmonyOS 状态变量更新及其@watch监听问题
628浏览 • 1回复 待解决
HarmonyOS 组件状态变量改变,build重绘问题
657浏览 • 1回复 待解决
HarmonyOS taskpool参数是状态变量crash
497浏览 • 1回复 待解决
HarmonyOS 关于状态变量深层次响应的问题
515浏览 • 1回复 待解决
如何将界面上的状态变量传给服务层,在服务层修改状态变量对象的属性刷新页面
1145浏览 • 1回复 待解决
状态变量和常规变量有什么区别?
1078浏览 • 2回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
2363浏览 • 1回复 待解决
HarmonyOS zIndex能否通过状态变量来更新
452浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
1773浏览 • 1回复 待解决
HarmonyOS 外部类方法如何改变组件状态变量
389浏览 • 1回复 待解决
HarmonyOS hidumper查看状态变量关联的组件数
522浏览 • 1回复 待解决
HarmonyOS UI不刷新问题
663浏览 • 1回复 待解决
关于状态变量@state必须知道的事
1987浏览 • 1回复 待解决
#鸿蒙学习大百科#状态变量的变化何时会触发UI刷新?
751浏览 • 1回复 待解决
HarmonyOS 每个页面相同的状态变量如何封装?
868浏览 • 1回复 待解决
HarmonyOS 装饰器不刷新问题
733浏览 • 1回复 待解决
HarmonyOS @Builder嵌套二层传递状态变量无法识别
424浏览 • 1回复 待解决
@Provide的状态变量,是否可以观察多层嵌套的属性?
1414浏览 • 1回复 待解决
HarmonyOS @Builder函数接收的状态变量未引起内部ui变化
498浏览 • 1回复 待解决
HarmonyOS Navigtion组件,两个NavDestination之间如何同步状态变量
820浏览 • 1回复 待解决
基于滑动监听和状态变量实现滑动时取消按压态
1154浏览 • 1回复 待解决
HarmonyOS 子组件如何向父组件单向传递状态变量值
330浏览 • 1回复 待解决
HarmonyOS @Watch可以观察到@Consume装饰的状态变量更改吗
544浏览 • 1回复 待解决
HarmonyOS 怎么实现状态变量变化时,触发指定函数
363浏览 • 1回复 待解决
在 HarmonyOS 中,如果状态变量的更改没有正确地刷新 UI,很可能是因为状态管理或者数据绑定的问题。你的代码中,使用了
@State
装饰器来声明状态变量,但操作数组的方法可能没能通知框架当前状态发生了变化。## 问题分析
### 1. 数组操作 直接操作数组(如
splice
)不会触发对整个对象属性的变动通知。框架可能无法检测到数组内容的变化,从而不重新渲染组件。### 2. 确保状态更新 需要确保每次更改数组数据时,能够通知框架状态已经改变。
## 改进方法
### 使用
@State
和 @Link
@State
@Link
### 示例代码
以下是如何改进你的代码,以确保在删除数组元素时能够正确地刷新 UI:
### 关键点解释:
...
创建一个数组的副本。splice
操作,这样可以避免原数组的直接修改。this.arrtest.articleList
。通过这种方式,可以确保状态变量的更改能够被框架正确检测到,从而刷新 UI。如果有进一步的问题或特殊需求,请随时提问。
可参考如下关键代码: