鸿蒙组件数据传递:ui传递、@prop、@link
2023-12-25 12:28:37
鸿蒙组件数据传递方式有很多种,下面详细罗列一下:
注意:
文章内名词解释:
正向:父变子也变 逆向:子变父也变
**第一种:直接传递
- 特点: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:Aa
build() {
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:Aa
build() {
Row() {
Text(this.message)
// Text(this.obj.name)
Button("逆向改变").onClick(() => {
this.message = "子变父不变"
// this.obj.name = "子变父不变"
})
}
}
}
class Aa{
name: string = ''
}
文章来源:https://blog.csdn.net/weixin_39971163/article/details/135194218
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!