ArkTS #01# 组件通信

news/2025/1/16 6:53:36/文章来源:https://www.cnblogs.com/xkxf/p/18340762

一、通过Prop单向传递

/*
* 单双向绑定都有
* 父组件@State,子组件@Link,孙组件@Prop
* 数据流向:父组件 <--> 子组件 --> 孙组件*/@Entry
@Component
export struct BothBinding {@State fatherValue: number = 0//表示组件中的状态变量,这个状态变化会引起 UI 变更build() {Column() {// ====================== 待补全 ===================Text('单双向绑定').fontSize(55)Text('faValue: ' + this.fatherValue).fontSize(55).fontWeight(500).fontColor(Color.Red).backgroundColor(Color.Yellow).margin({top: 35,bottom: 20,})Row() {Button('+2').backgroundColor(Color.Pink).fontSize(55).onClick(() => {this.fatherValue += 2}).margin({right: 40,})Button('减2').backgroundColor(Color.Transparent).fontSize(55).onClick(() => {this.fatherValue -= 2})}.margin({bottom: 20})sonComponent({sonVal: $fatherValue})}.width('100%').height('100%').backgroundColor(0x1E90FF)}
}//子组件
@Component
struct sonComponent {@Link sonVal: numberbuild() {Column() {Text(`sonVal: ${ this.sonVal}`).fontSize(53).fontColor(Color.Red).backgroundColor(Color.Yellow)Row() {Button('+2').backgroundColor(Color.Pink).fontSize(55).onClick(() => {this.sonVal += 2}).margin({right: 40,})Button('减2').backgroundColor(Color.Transparent).fontSize(55).onClick(() => {this.sonVal -= 2})}grandsonComponent({val: this.sonVal})}}
}//孙组件
@Component
struct grandsonComponent {@Prop val: numberbuild() {Column() {Text('sonSon = ' + this.val).fontSize(55)Row() {Button('+2').backgroundColor(Color.Pink).fontSize(55).onClick(() => {this.val += 2}).margin({right: 40,})Button('减2').backgroundColor(Color.Transparent).fontSize(55).onClick(() => {this.val -= 2})}}}
}

二、通过Provide/Consume共享数据

//@Provide作为数据的提供方,可以更新其子孙节点的数据,并触发页面渲染。
//@Consume在感知到@Provide数据的更新后,会触发当前自定义组件的重新渲染。@Entry
@Component
struct CompA {@Provide("reviewVote") reviewVotes: number = 0;build() {Column() {// ====================== 待补全 ===================Text('父组件值:' + this.reviewVotes).fontSize(55)Row() {Button('+').fontSize(55).onClick(() => {this.reviewVotes++})Button('-').fontSize(55).onClick(() => {this.reviewVotes--})}CompB()}.width('100%').height('100%').backgroundColor(0x1E90FF)}
}// CompB
@Component
struct CompB {@Consume('reviewVote') xx: numberbuild() {Column() {Text('子组件值' + this.xx).fontSize(55)Row() {Button('+').fontSize(55).onClick(() => {this.xx++})Button('-').fontSize(55).onClick(() => {this.xx--})}CompC()}}
}// CompC
@Component
struct CompC {@Consume('reviewVote') xx: numberbuild() {Column() {Text('子子组件值' + this.xx).fontSize(55)Row() {Button('+').fontSize(55).onClick(() => {this.xx++})Button('-').fontSize(55).onClick(() => {this.xx--})}}}
}

三、监听器

// @Watch用于监听状态变量的变化
// @Watch注册一个回调方法onChanged, 当状态变量count被改变时, 触发onChanged回调。
//装饰器@State、@Prop、@Link、@ObjectLink、@Provide、@Consume、
// @StorageProp以及@StorageLink所装饰的变量均可以通过@Watch监听其变化。@Entry
@Component
struct watchBinding {@State @Watch('OnBasketUpdated') Num: number = 0@State Num2: number = 0OnBasketUpdated() {this.Num2 += 2}build() {Column() {Text('num1= ' + this.Num).fontSize(55)Text('num2= ' + this.Num2).fontSize(55)Row() {Button('num1 + 1').fontSize(55).onClick(() => {this.Num++})}}}
}

 

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

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

相关文章

风风影视安装使用

风风影视安装使用教程 一 安装软件下载风风影视 下载好后安装即可。二 配置地址1.点击设置 2.点击配置地址 3.将这串地址复制粘贴,点击确认https://gitee.com/ffddoz/tvbox1/raw/master/fantaiyingff.json到这步就可以使用了以下是功能介绍,非必须看点击主页之后,会有很多选…

idea=services启动类变成灰色了

idea启动大于5个services的时候就会让新启动的变成灰色,并且重启idea之后在services里找不到相关启动类(还要重新翻) 下面版本适用于2023.2.1+(老版本设置页在Advanced Settings中,略有不同) File----->Settings----->Advanced Settings----->Run/Debug,设置完…

常回家看看之tcachebin-attack

常回家看看之tcachebin-attack 自从glibc2.26之后出现了新的堆管理机制,及引用了tcachebin机制,tcachebin也是主要分配小堆块的,有40条bin链(0x10 - 0x410) 那么这样的分配有很多和smallbin 和fastbin重叠的部分,及malloc申请之后free掉的小堆块优先进入tcachebin中,这样…

java 面向对象1

1.java类一个类文件可以定义多个类,只能有一个用public修饰.java基本语法方面在有的很想c++.在学习java面向对象的时候我也得对比c++来学习.学习c++的三大特性:继承,多态,封装,是如何在java中体现的. 2.封装,封装是类最基础的特装类通过将好几个成员数据封装成一个整体,便于数据…

Mediawiki报错Wikimedia\Rdbms\DBQueryError的解决方案

需要运行php <你的mediawiki目录>/maintenance/update.php来更新数据库。上下文 Mediawiki登录页面报错Wikimedia\Rdbms\DBQueryError解决方法 虽然Mediawiki被墙了,很难找到官方文档,但我还是找到了Re: database problem提到的wiki-upgrade.txt。 其中,第12步指出需要…

数据中台以及数据仓库的介绍

数据中台 1、数据中台的概念数据中台是一种集中化的数据管理平台,用于整合和管理企业内部各个业务系统的数据。 它将数据从各个业务系统中抽取、清洗和集成,然后提供给其他业务系统或者数据应用进行分析、决策和创新。 数据中台的目标是实现数据的一致性、可信度和可用性,促…

常回家看看之fastbin_attack

常回家看看之fastbin_attack 原理分析 fastbin属于小堆块的管理,这里说的fastbin_attack大多指glibc2.26之前的手法,因为自glibc2.26以后,glibc迎来了一位新成员tcachebin,它减少了堆的开销,使堆管理变得迅速而高效,而且申请的小堆块会优先进入tachebin中,只有tachebin其…

触想工业显示器方案在汽车装配生产线上的应用

一、行业发展背景中国汽车工业协会数据显示,2023年我国汽车产销量双双实现历史性突破,分别达到3016.1万辆和3009.4万辆,并连续15年位居全球首位。汽车产业热销背后是先进的生产装配体系支撑,从零部件到整车,汽车的生产和工艺流程越来越复杂,涉及的自动化装配和检测设备也…

最大传输功率数学推导

最大传输功率,不仅适用于低频,也适用于高频。在个人的认知里,也同样可以用来解释高速信号的匹配原理,而不仅仅只是从阻抗不匹配造成的反射来解释。电路分析图 1. 由以上电路可知,负载功率表示如下2. 由复功率、能量守恒可知 3. 复阻抗的虚部,属于无功功率,发送等于接收…

caffe编译和基本使用(Windows + CPU)

xqspace 0. 摘要 本文主要完成以下几点:caffe默认支持是 vs2013/vs2015 + python2.7/python3.5,使用其他版本会比较麻烦,这里使用的是vs2015和python3.5;完成caffe在windows上的编译(cpu版);提供caffe的python接口;caffe的基本使用方法(这里是推荐几篇讲的比较详细的入…