通过HarmonyOS鸿蒙学习笔记(5)@State作用说明和简单案例一文我们知道@State修饰的变量发生变化时,会刷新相关页面更新UI。如果是子组件想要改变父组件的状态从而刷新UI改怎么办呢?比如如下代码:

如上图代码:PlayButton组件是Player组件的子组件,Player是父组件。我们的意图是在PlayButton组件中点击播放或者暂停按钮,父组件PlayerText文本信息随着改变。用来模拟播放器的播放和暂停效果。虽然父组件PlayerisPlaying组件使用了@State修饰,但是子组件PlayButton此时点击是没有效果的,父组件PlayerText并没有变化。那么怎么解决这一问题呢?此时@Link的作用就显现了出来。上图代码只需要做两处修改即可:

1、将PlayButton的buttonPlaying变量用@Link修饰。

@Component
struct PlayButton {@Link buttonPlaying: boolean
}

2、在初始化PlayButton组件需要将 PlayButton({buttonPlaying: this.isPlaying})改成PlayButton({buttonPlaying: $isPlaying}),即用@Link修饰的变量初始化的时候,需要用$修饰。

详细代码见@Link官方文档

事实上使用 @Consume和@Provide也可以达到上述效果,只不过代码要进行相关改造,改造如下:

总结,也就是说当开发者需要在子组件中针对父组件的一个变量(parent_a)设置双向同步时,开发者可以在父组件中使用@State装饰变量(parent_a),并在子组件中使用@Link装饰相应的变量(child_a)。这样的话,不仅可以实现父组件与单个子组件之间的数据同步,也可以实现父组件与多个子组件之间的数据同步。如下图所示,可以看到,父子组件针对ClassA类型的变量设置了双向同步,那么当子组件1中变量的属性c的值变化时,会通知父组件同步变化,而当父组件中属性c的值变化时,会通知所有子组件同步变化。(结论来源)

参考资料:
HarmonyOS鸿蒙学习笔记(5)@State作用说明和简单案例
@Link官方文档

HarmonyOS鸿蒙学习笔记(12)@Link的作用相关推荐

  1. HarmonyOS鸿蒙学习笔记(2)路由ohos.router的使用

    ohos.router路由入门指南 前言 路由跳转传递和接收参数 参考资料 前言 本文以eTS-3.1.6.6位版本来说明ohos.router的使用,重点来说明ohos.router怎么传递和接收参 ...

  2. HarmonyOS鸿蒙学习笔记(11)Flex组件alignItems属性说明

    Flex组件alignItems属性 1.代码示例 2.FlexDirection.Row情况下各个ItemAlign的运行情况. 2.1.alignItems:ItemAlign.Auto的运行效果 ...

  3. 软件测试工程师学习笔记12 - 数据库篇

    软件测试工程师学习笔记 -12 一.入门必读 二.Linux 三.数据库 1.MySQL基础 1)别名与重复记录 2)条件查询 3)聚合函数 4)数据分组 5)一个练习 6)分组后的数据筛选 7)数据 ...

  4. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  5. golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题

    golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...

  6. HALCON 20.11:深度学习笔记(12)---语义分割

    HALCON 20.11:深度学习笔记(12)--- 语义分割 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语义分割, ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep?

    台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep? 本博客整理自: http://blog.csdn.net/xzy_thu/article/detail ...

  8. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

  9. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

最新文章

  1. Spring boot 忽略对mybatis的配置
  2. 【转载】你真的了解补码吗
  3. W/System.err: at android.view.ViewConfiguration.get(ViewConfiguration.java:369)
  4. C++ 梳理(一):跑通简单程序
  5. Oracle(二)单行函数
  6. 运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法
  7. 编译安装vlmcsd
  8. 使用nvim来代替VSCode,神操作
  9. 图层php,ps图层怎么用
  10. AILearning:GitHub万星的中文机器学习资源,路线图、视频、电子书、学习建议全在这
  11. 基于微信小程序的五子棋小程序(含简单人机)
  12. 图神经网络学习(一)
  13. java word 颜色设置_如何为Word文档在Java中的背景颜色
  14. .removeAttribute is not a function
  15. 四苯基卟啉铜TPP-Cu(2+) cas14172-91-9分子量676.26600分子式C44H28CuN4
  16. 一起来找茬:下面这段代码是让计算机在屏幕上输出“hi”。其中有三个错误,快来改正吧
  17. 堆区(Heap)详细介绍
  18. ThinkPHP使用方法小记
  19. 激光雷达与相机融合(一)
  20. 对学计算机学生礼仪,做一名内外兼修的优秀大学生——记计算机科学学院大学生形象包装与职场礼仪讲座...

热门文章

  1. java中ceil怎么用举例_Java ceil() 方法
  2. 元界快讯|首个物联网元宇宙平台“物联森友会”即将上线
  3. Python系列 之 email模块 - 发送邮件
  4. 软件工程作业(流程图,盒图)
  5. 赛门铁克10月份智能安全分析报告
  6. html的标记符一般不分大小写,HTML5标记符的属性一般不区分大小写。
  7. 镁客网每周硬科技领域投融资汇总(2.24-3.2),地平线机器人晋升估值最高的AI芯片独角兽...
  8. Connections could not be acquired from the underlying database异常,已解决。
  9. 游客不满旅游团更改路线要求退钱遭推搡骨折
  10. 【日拱一卒进击大厂系列】如何写好一份技术简历