HarmonyOS 鸿蒙Next @ObjectLink使用问题
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时,需要注意以下几点:
- 初始化要求:@ObjectLink装饰的变量必须从父组件初始化,且只能接收被@Observed装饰的类的实例。这是实现双向数据同步的基础。
- 赋值操作:禁止对@ObjectLink装饰的变量进行赋值操作,否则会打断同步链并导致运行时错误。因为@ObjectLink变量是指向数据源的指针,直接赋值会改变其指向。
- 应用场景:@ObjectLink适用于需要实时同步数据的场景,如父子组件间的数据共享和更新。
如果在使用过程中遇到问题,建议检查以上几点是否满足。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。