HarmonyOS 鸿蒙Next 关于objectLink在数组对象中使用时 修改数据页面不刷新问题

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于objectLink在数组对象中使用时 修改数据页面不刷新问题

关于objectLink在数组对象中使用时,修改数据页面不刷新,打印数据有变化,希望能再父组件中修改数据时(数组对象)子组件页面能刷新

2 回复

需要借助子组件实现https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-observed-and-objectlink-V5#objectlink%E6%94%AF%E6%8C%81%E8%81%94%E5%90%88%E7%B1%BB%E5%9E%8B

参考demo

//[@Observed](/user/Observed) [@ObjectLink](/user/ObjectLink)

[@Observed](/user/Observed)

class InnerMessageVo {

  content: string;

  id: number;

  readState: boolean;

  constructor(id: number,content: string,readState: boolean) {

    this.id = id;

    this.content = content;

    this.readState = readState;

  }

}

[@Component](/user/Component)

struct ViweA{

  [@ObjectLink](/user/ObjectLink) a: InnerMessageVo;

  build() {

    Row(){

      Text(this.a.content)

    }

  }

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index2 {

  [@State](/user/State) arr1: InnerMessageVo[] = [new InnerMessageVo(1,"123",true),new InnerMessageVo(2,"123",true),new InnerMessageVo(3,"123",true)]

  build() {

    Row() {

      Column() {

            List(){

              ForEach(this.arr1,(item: InnerMessageVo,index: number)=>{

                ListItem(){

                  ViweA({a:item})

                  //Text(this.arr1[index].content)

                }

              })

            }

        Button('change')

          .onClick(() => {

            console.log('123');

            this.arr1[1].content = '666'

          })

      }

      .width('100%')

    }

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next 关于objectLink在数组对象中使用时 修改数据页面不刷新问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,针对objectLink在数组对象中使用时修改数据页面不刷新的问题,通常是由于数据绑定机制未能及时捕获到数组内部元素的变化。

在鸿蒙系统中,objectLink主要用于实现数据与UI组件之间的双向绑定。当数组对象作为数据源时,如果直接修改数组内部元素(如通过索引赋值),系统可能无法检测到这种变化,因此UI不会自动刷新。

解决此问题的一种方法是使用系统提供的方法或API来更新数组,以确保数据绑定机制能够捕获到变化。例如,可以使用数组的splicepushpop等方法来修改数组,这些方法通常会触发UI的更新。

如果直接修改数组元素是不可避免的,可以考虑手动触发UI的刷新。在某些情况下,可以通过调用页面的refresh方法或相关组件的invalidate方法来强制刷新UI。

此外,确保数组对象及其内部元素都符合鸿蒙系统的数据绑定要求,即它们应该是可观察的数据对象。如果数组元素是基本数据类型(如int、float等),可能需要将其封装为可观察的对象。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部