美文网首页鸿蒙
状态 - @Link装饰器:父子双向同步

状态 - @Link装饰器:父子双向同步

作者: wendy__xu | 来源:发表于2024-03-14 19:44 被阅读0次

子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。

概述

@Link装饰的变量与其父组件中的数据源共享相同的值。

限制条件

@Link装饰器不能在@Entry装饰的自定义组件中使用。

直接上图
初始化规则图示


image.png

注意:被装饰变量的初始值 无,禁止本地初始化。

框架行为

@Link装饰的变量和其所属的自定义组件共享生命周期。

  1. 初始渲染:执行父组件的build()函数后将创建子组件的新实例。初始化过程如下:
    a. 必须指定父组件中的@State变量,用于初始化子组件的@Link变量。子组件的@Link变量值与其父组件的数据源变量保持同步(双向数据同步)。
    b. 父组件的@State状态变量包装类通过构造函数传给子组件,子组件的@Link包装类拿到父组件的@State的状态变量后,将当前@Link包装类this指针注册给父组件的@State变量。
  2. @Link的数据源的更新:即父组件中状态变量更新,引起相关子组件的@Link的更新。处理步骤:
    a. 通过初始渲染的步骤可知,子组件@Link包装类把当前this指针注册给父组件。父组件@State变量变更后,会遍历更新所有依赖它的系统组件(elementid)和状态变量(比如@Link包装类)。
    b. 通知@Link包装类更新后,子组件中所有依赖@Link状态变量的系统组件(elementId)都会被通知更新。以此实现父组件对子组件的状态数据同步。
  3. @Link的更新:当子组件中@Link更新后,处理步骤如下(以父组件为@State为例):
    a. @Link更新后,调用父组件的@State包装类的set方法,将更新后的数值同步回父组件。
    b. 子组件@Link和父组件@State分别遍历依赖的系统组件,进行对应的UI的更新。以此实现子组件@Link同步回父组件@State。

使用场景

相关文章

  • AQS同步队列与条件队列的关系

    一、关系 同步队列节点来源: 1、同步队列依赖一个双向链表来完成同步状态的管理,当前线程获取同步状态失败 后,同步...

  • 服务器文件同步

    服务器文件双向、多向同步rsync+sersync 安装前的准备(各同步服务器都配置) # 因为这会降低服务器...

  • 第5章 Java的锁

    基本概念: 锁:控制多线程并发访问资源;队列同步器:管理同步状态,实现锁;同步状态:同步器的操作对象,int类型;...

  • Python语法糖(decorator)

    类似作用 装饰器用法 带参数的装饰器 同步锁的例子 注意几个参数的顺序

  • React开发之【Mobx状态管理,非装饰器模式】

    React开发之【Mobx状态管理,非装饰器模式】 React项目装饰器开启失败, 下面是不用装饰器模式的写法 A...

  • Unity帧同步的实现方法

    帧同步 游戏同步主要方向是 状态同步和帧同步。 状态同步 状态同步简单来说就是有一个权威服务器运行着一个没有图形界...

  • 爱家(租房系统)---- 修改用户信息

    装饰器 用户模块的很多操作都是需要在登录状态下完成的,所以需要使用装饰器对登录状态进行检验。本项目中的装饰器在工具...

  • redis的主从复制

    成为从服务器的命令: SLAVEOF 复制功能分为 同步 + 命令传播 同步:将从服务器的状态更新到主服务器的状态...

  • 并发编程05--Java中的锁(Lock接口和队列同步器)

    Java中的锁Lock接口队列同步器队列同步器的接口与示例队列同步器的实现分析同步队列独占式同步状态获取与释放共享...

  • AQS的原理及源码分析

    AQS是什么 AQS= volatile修饰的state变量(同步状态) +FIFO队列(CLH改善版的虚拟双向队...

网友评论

    本文标题:状态 - @Link装饰器:父子双向同步

    本文链接:https://www.haomeiwen.com/subject/wpdizdtx.html