【鸿蒙学习笔记】@Link装饰器:父子双向同步

官方文档:@Link装饰器:父子双向同步

目录标题

  • [Q&A] @Link装饰器作用
  • [Q&A] @Link装饰器特点
  • 样例:简单类型
  • 样例:数组类型
  • 样例:Map类型
  • 样例:Set类型
  • 样例:联合类型

[Q&A] @Link装饰器作用

link是双向数据同步:
父组件修改数据 , 子组件UI更新。
子组件修改数据, 父组件UI更新。

[Q&A] @Link装饰器特点

  1. @Link装饰器不能在@Entry装饰的自定义组件中使用。
  2. @Link装饰器禁止初始化。

样例:简单类型

class ButtonWidth {width: number = 0;constructor(width: number) {this.width = width;}
}@Component
struct GreenButton {@Link buttonWidth1: ButtonWidth;build() {Button('子 Green Button').width(this.buttonWidth1.width).height(40).backgroundColor('#64bb5c').fontColor('#FFFFFF,90%').onClick(() => {if (this.buttonWidth1.width < 300) {this.buttonWidth1.width += 30;} else {this.buttonWidth1 = new ButtonWidth(180);}})}
}@Entry
@Component
struct PracExample {@State buttonWidth: ButtonWidth = new ButtonWidth(180);build() {Column() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {Button('父 Green Button').width(300).height(40).margin(12).fontColor('#FFFFFF,90%').onClick(() => {this.buttonWidth.width = (this.buttonWidth.width < 300) ? this.buttonWidth.width + 30 : 100;})GreenButton({ buttonWidth1: $buttonWidth }).margin(12)}}}
}

在这里插入图片描述

样例:数组类型

@Component
struct Child {@Link items: number[];build() {Column() {Button(`追加新值`).margin(12).width(312).height(40).fontColor('#FFFFFF,90%').onClick(() => {this.items.push(this.items.length + 1);})Button(`重置`).margin(12).width(312).height(40).fontColor('#FFFFFF,90%').onClick(() => {this.items = [100, 200, 300];})}}
}@Entry
@Component
struct PracExample {@State arr: number[] = [1, 2, 3];build() {Column() {Child({ items: $arr }).margin(12)ForEach(this.arr,(item: number) => {Button(`${item}`).margin(12).width(312).height(40).backgroundColor('#11a2a2a2').fontColor('#e6000000')},(item: ForEachInterface) => item.toString())}}
}

在这里插入图片描述

样例:Map类型

@Component
struct Child {@Link map: Map<number, string>build() {Column() {ForEach(Array.from(this.map.entries()), (item: [number, string]) => {Row() {Text(`${item[0]}`).fontSize(30)Text(`→`).fontSize(30)Text(`${item[1]}`).fontSize(30)}})Button('初始化').width('100%').onClick(() => {this.map = new Map([[0, "a"], [1, "b"], [3, "c"]]);})Button('追加新值').width('100%').onClick(() => {this.map.set(4, "d");})Button('清除').width('100%').onClick(() => {this.map.clear();})Button('修改第1个值').width('100%').onClick(() => {this.map.set(0, "aa");})Button('删除第一个值').width('100%').onClick(() => {this.map.delete(0);})}}
}@Entry
@Component
struct PracExample {@State message: Map<number, string> = new Map([[0, "a"], [1, "b"], [3, "c"]])build() {Column() {Child({ map: this.message })}.width('100%')}
}

在这里插入图片描述

样例:Set类型

@Component
struct Child {@Link message: Set<number>build() {Column() {ForEach(Array.from(this.message.entries()), (item: [number, string]) => {Text(`${item[0]}`).fontSize(30)})Button('init set').width('100%').onClick(() => {this.message = new Set([0, 1, 2, 3, 4]);})Button('set new one').width('100%').onClick(() => {this.message.add(5);})Button('clear').width('100%').onClick(() => {this.message.clear();})Button('删除元素5').width('100%').onClick(() => {this.message.delete(5);})}.width('100%')}
}@Entry
@Component
struct PracExample {@State message: Set<number> = new Set([0, 1, 2, 3, 4])build() {Column() {Child({ message: this.message })}.width('100%')}
}

在这里插入图片描述

样例:联合类型

@Component
struct Child {@Link name: string | undefinedbuild() {Column() {Button('子 改名 小芳').width('100%').onClick(() => {this.name = "小芳"})Button('子 改名 undefined').width('100%').onClick(() => {this.name = undefined})}.width('100%')}
}@Entry
@Component
struct PracExample {@State name: string | undefined = "小明"build() {Column() {Text(`名字是 ${this.name}`).fontSize(30)Child({ name: this.name })Button('父 改名 小华').width('100%').onClick(() => {this.name = "小华"})Button('父 改名 undefined').width('100%').onClick(() => {this.name = undefined})}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/370502.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习模型加密python版本

支持加密的模型: # torch、torch script、onnx、tensorrt 、torch2trt、tensorflow、tensorflow2tensorrt、paddlepaddle、paddle2tensorrt 深度学习推理模型通常以文件的形式进行保存&#xff0c;相应的推理引擎通过读取模型文件并反序列化即可进行推理过程. 这样一来&#…

MongoDB 单节点升级为副本集高可用集群(1主1从1仲裁)

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG、Mongodb数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享…

leetcode力扣_排序问题

215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了&#xff0c;只会一个冒泡排序法了&#xff0c;就写了一个冒牌排序法&#xff0c;将给的数组按照降序排列&#xff0c;然后取nums[k-1]就是题目要求的&#xff0c;但是提交之后对于有的示例显示”超出时间限制…

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表&#xff0c;可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

pycharm如何使用jupyter

目录 配置jupyter新建jupyter文件别人写的方法&#xff08;在pycharm种安装&#xff0c;在网页中使用&#xff09; pycharm专业版 配置jupyter 在pycharm终端启动一个conda虚拟环境&#xff0c;输入 conda install jupyter会有很多前置包需要安装&#xff1a; 新建jupyter…

VScode将界面语言设置为中文

1. 点击左侧的扩展图标&#xff0c;打开侧边栏“EXTENSIONS”面板。 2. 在搜索框中输入“Chinese”&#xff0c;查找出“中文简体”插件&#xff0c;点击“install”按钮。 3. 等待插件安装完成&#xff0c;点击右下角“restart”按钮&#xff0c;从而重新启动Vscode。

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)

在许多情况下&#xff0c;我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展&#xff0c;然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在&#xff0c;扩展主机和集线器之间的距离的一种简单方法就是…

【ARMv8/v9 GIC 系列 1.5 -- Enabling the distribution of interrupts】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 Enabling the distribution of interruptsGIC Distributor 中断组分发控制CPU Interface 中断组分发控制Physical LPIs 的启用Summary Enabling the distribution of interrupts 在ARM GICv3和GICv4体系结构中&#xff0c;中断分发…

python sklearn机械学习-数据预处理

&#x1f308;所属专栏&#xff1a;【机械学习】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您…

关于string的‘\0‘与string,vector构造特点加部分特别知识点的讨论

目录 前言&#xff1a; 问题一&#xff1a;关于string的\0问题讨论 问题二&#xff1a;C标准库中的string内存是分配在堆上面吗&#xff1f; 问题三&#xff1a;string与vector的capacity大小设计的特点 问题四&#xff1a;string的流提取问题 问题五&#xff1a;迭代器失…

【Python】组合数据类型:序列,列表,元组,字典,集合

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言组合数据类型序列类型序列常见的操作符列表列表操作len()append()insert()remove()index()sort()reverse()count() 元组三种序列类型的区别 集合类型四种操作符集合setfrozens…

Vue表单输入绑定v-model

表单输入绑定 在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给Javascript中相应的变量。手动连接绑定和更改事件监听器可能会很麻&#xff0c;v-model 指令帮我们简化了这一步骤。 <template><h3>表单输入绑定</h3><hr> <inpu…

C/C++连接MySQL

今天刚学习了MySQL,于是去尝试能否让C/C连接上MySQL,一番尝试后也是成功了&#xff0c;把经验分享给大家&#xff01; 1.首先我们需要找到MySQL所在的目录下&#xff0c;一般默认安装路径都在C:\Program Files\MySQL\MySQL Server 8.0下&#xff1b; 2.随后我们打开Visual Stu…

[go-zero] 简单微服务调用

文章目录 1.注意事项2.服务划分及创建2.1 用户微服务2.2 订单微服务 3.启动服务3.1 etcd 服务启动3.2 微服务启动3.3 测试访问 1.注意事项 go-zero微服务的注册中心默认使用的是Etcd。 本小节将以一个订单服务调用用户服务来简单演示一下&#xff0c;其实订单服务是api服务&a…

“郭有才”商标主要类别都已被注册!

前阵山东网红“郭有才”火遍大江北&#xff0c;当然少不了许多想去申请注册“郭有才”商标名称的&#xff0c;普推商标知产老杨检索&#xff0c;发现“郭有才”商标申请了43个类别&#xff0c;基本上类别都被申请注册&#xff0c;已注册的商标大多是在“郭有才”火之前申请注册…

NDVI数据集提取植被覆盖度FVC

植被覆盖度FVC 植被覆盖度&#xff08;Foliage Vegetation Cover&#xff0c;FVC&#xff09;是指植被冠层覆盖地表的面积比例&#xff0c;通常用来描述一个区域内植被的茂密程度或生长状况。它是生态学、环境科学以及地理信息系统等领域的重要指标&#xff0c;对于理解地表能…

数据结构之“栈”(全方位认识)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 前言 栈是一种数据结构&#xff0c;具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲&#xff01;&#xff01; …

react 项目中预防xss攻击的插件 dompurify

一、安装 $ yarn add dompurify $ yarn add --dev types/dompurify 二、使用 import DOMPurify from dompurify;// 1、处理&#xff1a; DOMPurify.sanitize(htmlContent)// 2、之后放进 dangerouslySetInnerHTML dangerouslySetInnerHTML{{ __html: cleanHTML }} 如&#…

Android Studio Run窗口中文乱码解决办法

Android Studio Run窗口中文乱码解决办法 问题描述&#xff1a; AndroidStudio 编译项目时Run窗口中文乱码&#xff0c;如图&#xff1a; 解决方法&#xff1a; 依次打开菜单&#xff1a;Help--Edit Custom VM Options&#xff0c;打开studio64.exe.vmoptions编辑框&#xf…

c/c++ 程序运行的过程分析

c/c编译基础知识 GNU GNU&#xff08;GNU’s Not Unix!&#xff09;是一个由理查德斯托曼&#xff08;Richard Stallman&#xff09;在1983年发起的自由软件项目&#xff0c;旨在创建一个完全自由的操作系统&#xff0c;包括操作系统的内核、编译器、工具、库、文本编辑器、邮…