当前位置: 首页 > news >正文

鸿蒙组件数据传递:ui传递、@prop、@link

鸿蒙组件数据传递方式有很多种,下面详细罗列一下:

注意:
文章内名词解释:
正向:父变子也变 逆向:子变父也变

**第一种:直接传递

- 特点:1、任何数据类型都可以传递 2、不能响应式更新 (正向 逆向都不行) 3、适合纯ui渲染** 4、子组件需要初始化数据

@Entry
@Component
struct Demo04 {@State message: string = 'Hello World123'@State obj: Aa = {name: 'zhangsan'}build() {Row() {Column() {Text("基本数据类型")Son({ message: this.message })Divider().strokeWidth(2)Text("对象数据类型")Son({ obj:this.obj })Button('改变数据').onClick((event: ClickEvent) => {this.message = '666'})}.width('100%')}.height('100%')}
}@Component
struct Son {message: string = ''obj:Aa = {name:''}build() {Row() {Text(this.message)Text(this.obj.name)}}
}class Aa{name: string = ''
}

第二种:@prop传递

特点:1、只能传递基本数据类型 2、可以正向的响应式数据更新 3、适合父组件改变子组件数据,但是子组件无法改变父组件数据的需求 4、子组件不需要初始化数据

@Entry
@Component
struct Demo04 {@State message: string = 'Hello World123'@State obj: Aa = {name: 'zhangsan'}build() {Row() {Column() {Text(this.message)Button('改变数据').onClick((event: ClickEvent) => {this.message = '666'}).margin({bottom:20})Divider().strokeWidth(5)Text("基本数据类型")Son({ message: this.message })Divider().strokeWidth(2)Text("对象数据类型")// Son({ obj:this.obj })}.width('100%')}.height('100%')}
}@Component
struct Son {@Prop message:string// @Prop obj:Aabuild() {Row() {Text(this.message)// Text(this.obj.name)Button("逆向改变").onClick(() => {this.message = "子变父不变"// this.obj.name = "子变父不变"})}}
}class Aa{name: string = ''
}

第二种:@link传递

特点:1、任何数据类型都可以 2、可以正向和逆向的响应式数据更新 3、适合子父组件一起更新数据的需求 4、子组件不需要初始化数据

@Entry
@Component
struct Demo04 {@State message: string = 'Hello World123'@State obj: Aa = {name: 'zhangsan'}build() {Row() {Column() {Text(this.message)Text(this.obj.name)Button('改变数据').onClick((event: ClickEvent) => {this.message = '666'this.obj.name = "lisi123"}).margin({bottom:20})Divider().strokeWidth(5)Text("基本数据类型")Son({message:$message})Divider().strokeWidth(2)Text("对象数据类型")// Son({obj:$obj})}.width('100%')}.height('100%')}
}@Component
struct Son {@Link message:string// @Link obj:Aabuild() {Row() {Text(this.message)// Text(this.obj.name)Button("逆向改变").onClick(() => {this.message = "子变父不变"// this.obj.name = "子变父不变"})}}
}class Aa{name: string = ''
}

鸿蒙-传智播客-博学谷

http://www.lryc.cn/news/269092.html

相关文章:

  • ubuntu 开机自报IP地址(用于无屏幕小车-远程连接)
  • Angular——:host 和::deep
  • 键盘字符(#键)显示错误
  • geemap学习笔记037:分析地理空间数据--坐标格网和渔网
  • Bluetooth Mesh 入门学习干货,参考Nordic资料(更新中)
  • 磁盘管理 :逻辑卷、磁盘配额
  • GitHub教程-自定义个人页制作
  • Frappe Charts:数据可视化的强大工具
  • 【Vulnhub 靶场】【Hms?: 1】【简单】【20210728】
  • 浅谈C4模型
  • SeaTunnel流处理同步MySQL数据至ClickHouse
  • Arduino stm32 USB CDC虚拟串口使用示例
  • Java开发框架和中间件面试题(4)
  • 【腾讯云中间件】2023年热门文章集锦
  • SpringBoot 实现订单30分钟自动取消的策略
  • Qt篇——QwtPainter::drawPie绘制扇形
  • Mybatis Java API - SqlSession
  • java freemarker 动态生成excel文件
  • 第38节: Vue3 鼠标按钮修改器
  • redis cluster判断key属于那个分片。
  • Centos7:Jenkins+gitlab+node项目启动(3)
  • Linux安装GitLab教程
  • react 之 美团案例
  • C基础使用
  • Linux网络编程——Socket编程步骤及常用API
  • 数据挖掘 K-Means聚类
  • 医疗卫生行业网络安全需求发展
  • 【Unity热更新】学会AssetsBundle打包、加载、卸载
  • 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • vue 监听浏览器关闭或刷新事件