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
待解决
相关问题
如何将界面上的状态变量传给服务层,在服务层修改状态变量对象的属性刷新页面
591浏览 • 1回复 待解决
状态变量和常规变量有什么区别?
413浏览 • 2回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI
1669浏览 • 1回复 待解决
HarmonyOS 装饰器不刷新问题
77浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
900浏览 • 1回复 待解决
HarmonyOS 每个页面相同的状态变量如何封装?
283浏览 • 1回复 待解决
#鸿蒙学习大百科#状态变量的变化何时会触发UI刷新?
197浏览 • 1回复 待解决
关于状态变量@state必须知道的事
1052浏览 • 1回复 待解决
HarmonyOS Navigtion组件,两个NavDestination之间如何同步状态变量
327浏览 • 1回复 待解决
@Provide的状态变量,是否可以观察多层嵌套的属性?
808浏览 • 1回复 待解决
基于滑动监听和状态变量实现滑动时取消按压态
683浏览 • 1回复 待解决
#鸿蒙学习大百科#在ArkUI中,什么是状态变量?
170浏览 • 1回复 待解决
HarmonyOS @prop修饰的子组件属性不刷新问题
91浏览 • 1回复 待解决
HarmonyOS @Require 修饰的无状态变量必须要给初始默认值?
68浏览 • 1回复 待解决
HarmonyOS LazyForEach修改数据源不刷新问题
406浏览 • 1回复 待解决
HarmonyOS 页面刷新问题
252浏览 • 1回复 待解决
HarmonyOS 列表刷新问题
515浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中使用@Watch装饰器监听状态变量变化?
57浏览 • 1回复 待解决
backgroud()方法使用@State修饰的状态变量值更新后未能触发不同的@builder方法刷新
2186浏览 • 1回复 待解决
HarmonyOS 页面跳转刷新问题
682浏览 • 1回复 待解决
HarmonyOS UI 未刷新问题
439浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS Next中灵活运用状态变量和普通变量来构建界面?
60浏览 • 1回复 待解决
HarmonyOS List item 刷新问题
686浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在鸿蒙开发中使用状态变量强行更新组件?
21浏览 • 1回复 待解决
#鸿蒙通关秘籍#怎样在ArkTS中使用@Watch装饰器监听状态变量的变化?
96浏览 • 1回复 待解决
在 HarmonyOS 中,如果状态变量的更改没有正确地刷新 UI,很可能是因为状态管理或者数据绑定的问题。你的代码中,使用了
@State
装饰器来声明状态变量,但操作数组的方法可能没能通知框架当前状态发生了变化。## 问题分析
### 1. 数组操作 直接操作数组(如
splice
)不会触发对整个对象属性的变动通知。框架可能无法检测到数组内容的变化,从而不重新渲染组件。### 2. 确保状态更新 需要确保每次更改数组数据时,能够通知框架状态已经改变。
## 改进方法
### 使用
@State
和 @Link
@State
@Link
### 示例代码
以下是如何改进你的代码,以确保在删除数组元素时能够正确地刷新 UI:
### 关键点解释:
...
创建一个数组的副本。splice
操作,这样可以避免原数组的直接修改。this.arrtest.articleList
。通过这种方式,可以确保状态变量的更改能够被框架正确检测到,从而刷新 UI。如果有进一步的问题或特殊需求,请随时提问。
可参考如下关键代码: