HarmonyOS 鸿蒙Next 装饰器@ObjectLink和@Link的区别是什么

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

HarmonyOS 鸿蒙Next 装饰器@ObjectLink@Link的区别是什么

装饰器@ObjectLink@Link的区别是什么

2 回复

[@Link](/user/Link)装饰器支持接收Object、class、string、number、boolean、enum类型,以及这些类型的数组。

[@Link](/user/Link)装饰器修饰的变量是对父组件传入状态的引用的拷贝,两者指向同一个地址。

[@Link](/user/Link)装饰器的变量和父组件是双向绑定的关系。当父组件数据源发生变化时,接收该数据源的[@Link](/user/Link)所在组件的实例会重新渲染。 当该组件内被[@Link](/user/Link)装饰的变量被修改时,父组件数据源会同步修改,父组件实例也会重新渲染。

[@Link](/user/Link)需要和其数据源类型完全相同,且仅能观察到第一层的变化。

[@ObjectLink](/user/ObjectLink)只支持接收被[@Observed](/user/Observed)装饰的class实例及继承Date或者Array的class实例。

[@ObjectLink](/user/ObjectLink)装饰的变量是只读的,不支持对状态重新赋值。

[@ObjectLink](/user/ObjectLink)必须配合[@Observed](/user/Observed)使用,它的设计是为了解决对嵌套类对象属性变化的监听,如需要观察对象数组中单个数据项的属性值变化,或嵌套对象的对象类型属性的子属性变化,也就是可以监听到更深层级的变化。

具体可以参考:状态管理最佳实践:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-status-management-V5#section2592819104120

在HarmonyOS鸿蒙Next中,@ObjectLink@Link装饰器都用于实现数据同步,但它们在使用场景和功能上有所不同,具体如下:

@ObjectLink

  • 使用场景:主要用于嵌套对象、对象数组、二维数组等复杂数据结构。
  • 功能:允许观察和同步对象深层嵌套属性的变化。当对象属性发生变化时,UI会相应更新。
  • 限制:变量只读,不能重新赋值(整体替换除外,但要在父组件进行),且类型必须是对象或类。

@Link

  • 使用场景:适用于简单类型(如string、number等)和类对象类型,以及数组类型。
  • 功能:在父子组件之间建立双向数据同步关系。任何一方数据的改变都会实时同步到另一方。
  • 限制:变量类型需明确指定,且和双向绑定状态变量的类型相同。不能本地初始化,只能通过构造参数从父组件传入初始值。

总之,@ObjectLink更适用于复杂嵌套对象的数据同步,而@Link则更适用于简单类型和类对象类型的双向数据同步。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部