子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。
概述
@Link装饰的变量与其父组件中的数据源共享相同的值。
限制条件
@Link装饰器不能在@Entry装饰的自定义组件中使用。
直接上图
初始化规则图示
image.png
注意:被装饰变量的初始值 无,禁止本地初始化。
框架行为
@Link装饰的变量和其所属的自定义组件共享生命周期。
- 初始渲染:执行父组件的build()函数后将创建子组件的新实例。初始化过程如下:
a. 必须指定父组件中的@State变量,用于初始化子组件的@Link变量。子组件的@Link变量值与其父组件的数据源变量保持同步(双向数据同步)。
b. 父组件的@State状态变量包装类通过构造函数传给子组件,子组件的@Link包装类拿到父组件的@State的状态变量后,将当前@Link包装类this指针注册给父组件的@State变量。 - @Link的数据源的更新:即父组件中状态变量更新,引起相关子组件的@Link的更新。处理步骤:
a. 通过初始渲染的步骤可知,子组件@Link包装类把当前this指针注册给父组件。父组件@State变量变更后,会遍历更新所有依赖它的系统组件(elementid)和状态变量(比如@Link包装类)。
b. 通知@Link包装类更新后,子组件中所有依赖@Link状态变量的系统组件(elementId)都会被通知更新。以此实现父组件对子组件的状态数据同步。 - @Link的更新:当子组件中@Link更新后,处理步骤如下(以父组件为@State为例):
a. @Link更新后,调用父组件的@State包装类的set方法,将更新后的数值同步回父组件。
b. 子组件@Link和父组件@State分别遍历依赖的系统组件,进行对应的UI的更新。以此实现子组件@Link同步回父组件@State。
网友评论