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支持状态变量? 
1237浏览  • 1回复 待解决
HarmonyOS 状态变量更新及其@watch监听问题 
1298浏览  • 1回复 待解决
HarmonyOS 组件状态变量改变,build重绘问题 
1075浏览  • 1回复 待解决
HarmonyOS taskpool参数是状态变量crash 
1151浏览  • 1回复 待解决
HarmonyOS 关于状态变量深层次响应的问题 
1231浏览  • 1回复 待解决
如何将界面上的状态变量传给服务层,在服务层修改状态变量对象的属性刷新页面 
1634浏览  • 1回复 待解决
状态变量和常规变量有什么区别? 
1695浏览  • 2回复 待解决
自定义组件中,批量更新多个状态变量 vs 批量更新多个非状态变量后更新一个UI无关状态变量强制更新UI 
2934浏览  • 1回复 待解决
HarmonyOS zIndex能否通过状态变量来更新 
861浏览  • 1回复 待解决
ArkTS中如何监听状态变量的变化? 
2449浏览  • 1回复 待解决
HarmonyOS 外部类方法如何改变组件状态变量 
780浏览  • 1回复 待解决
HarmonyOS  hidumper查看状态变量关联的组件数 
989浏览  • 1回复 待解决
关于状态变量@state必须知道的事 
2836浏览  • 1回复 待解决
HarmonyOS UI不刷新问题 
1179浏览  • 1回复 待解决
#鸿蒙学习大百科#状态变量的变化何时会触发UI刷新? 
1302浏览  • 1回复 待解决
HarmonyOS  每个页面相同的状态变量如何封装? 
1256浏览  • 1回复 待解决
HarmonyOS @Builder嵌套二层传递状态变量无法识别 
919浏览  • 1回复 待解决
HarmonyOS 装饰器不刷新问题 
1208浏览  • 1回复 待解决
@Provide的状态变量,是否可以观察多层嵌套的属性? 
1832浏览  • 1回复 待解决
HarmonyOS @Builder函数接收的状态变量未引起内部ui变化 
941浏览  • 1回复 待解决
HarmonyOS  Navigtion组件,两个NavDestination之间如何同步状态变量 
1327浏览  • 1回复 待解决
HarmonyOS @Watch可以观察到@Consume装饰的状态变量更改吗 
945浏览  • 1回复 待解决
HarmonyOS 子组件如何向父组件单向传递状态变量值 
796浏览  • 1回复 待解决
基于滑动监听和状态变量实现滑动时取消按压态 
1625浏览  • 1回复 待解决
HarmonyOS 怎么实现状态变量变化时,触发指定函数 
779浏览  • 1回复 待解决





















在 HarmonyOS 中,如果状态变量的更改没有正确地刷新 UI,很可能是因为状态管理或者数据绑定的问题。你的代码中,使用了 
@State 装饰器来声明状态变量,但操作数组的方法可能没能通知框架当前状态发生了变化。## 问题分析
### 1. 数组操作 直接操作数组(如 
splice)不会触发对整个对象属性的变动通知。框架可能无法检测到数组内容的变化,从而不重新渲染组件。### 2. 确保状态更新 需要确保每次更改数组数据时,能够通知框架状态已经改变。
## 改进方法
### 使用 
@State 和 @Link@State@Link### 示例代码
以下是如何改进你的代码,以确保在删除数组元素时能够正确地刷新 UI:
### 关键点解释:
... 创建一个数组的副本。splice 操作,这样可以避免原数组的直接修改。this.arrtest.articleList。通过这种方式,可以确保状态变量的更改能够被框架正确检测到,从而刷新 UI。如果有进一步的问题或特殊需求,请随时提问。
可参考如下关键代码: