HarmonyOS 鸿蒙Next @ObjectLink使用问题

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

HarmonyOS 鸿蒙Next @ObjectLink使用问题

这个报错是为什么?The ‘@ObjectLink’ decorated attribute ‘person’ must be an ‘@Observed’ decorated class or a union of ‘@Observed’ decorated class and undefined or null, or both. <ArkTSCheck>

2 回复
这里需要中间一个子组件,内部编写一个简单的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 ObjectLinkPage {
  [@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的使用问题,以下是一些专业解答:

@ObjectLink装饰器主要用于在嵌套类对象属性变化的场景中进行双向数据同步。它让子组件中的状态变量与父组件中的状态变量保持同步,相当于指向数据源的指针。

使用@ObjectLink时,需要注意以下几点:

  1. 初始化要求@ObjectLink装饰的变量必须从父组件初始化,且只能接收被@Observed装饰的类的实例。这是实现双向数据同步的基础。
  2. 赋值操作:禁止对@ObjectLink装饰的变量进行赋值操作,否则会打断同步链并导致运行时错误。因为@ObjectLink变量是指向数据源的指针,直接赋值会改变其指向。
  3. 应用场景@ObjectLink适用于需要实时同步数据的场景,如父子组件间的数据共享和更新。

如果在使用过程中遇到问题,建议检查以上几点是否满足。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部