前言
上一节简略开篇,进行了准备工作和一些ArcTS
的根本语法,这篇首要讲数据方面,首要便是状况办理
和传值
,是很要点的一方面,所以并没有和上一节放在一起,这部分有些人会发现和其他结构有相似之处,我也期望咱们不要说抄谁抄谁的,毕竟像的话对开发者来说能够很大一部分下降学习成本,并没有什么欠好的
好的,咱们开端吧~
状况办理
@State
@State
是一个装修器,是用来寄存数据
的,比较好了解,而且在之前的代码比如咱们就现已见过了
由@State的数据来进行状况驱动视图更新
代码很简略
@State count: number = 0;
需求留意的是@State初始化的数据有必要赋值
这儿咱们评论简略用法,至于复杂的用法能够到项目中介绍
传值
关于传值,官网给了一张图片,咱们现在只重视组件的传值即可
通过这个图咱们调查出,有父母,有孩子,有子孙,这表现出了组件之间的层级
联系,有层级了才能表现出传递性
一起咱们还发现,有的箭头是单向的,有的是双向的,所以证明父-子-孙
之间是能够相互进行数据传递的,其间就会有单层传递
,也能够跨层传递
,所以就会有不同的装修器来完结对应的功用
其实根据这个图,有其他结构学习经历的朋友现已大概了解了,也能看出来哪个是单向
的装修器,哪个是双向
的,以及哪个是跨级
的了
那咱们挨个介绍吧~
@Prop、@Link装修器
@Prop装修器
用来进行父子
组件的通讯,并且是单向
的传递
但是这儿需求留意的是,用@Prop装修
的数据是不能够进行赋值
的
@Entry
@Component
struct Demo {
@State message: string = 'shaka'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('改动子组件数据')
.width(200)
.height(200)
.onClick(()=>{
this.message = 'virgo'
})
Son({name:this.message})
}
.width('100%')
}
.height('100%')
}
}
@Component //子组件
struct Son {
@Prop name:string //不能进行赋值
build() {
Row(){
Text(this.name)
.fontSize(50)
Button('改动父组件数据')
.width(200)
.height(200)
.backgroundColor(Color.Orange)
.onClick(()=>{
this.name = 'hhh'
})
}
}
}
此刻数据只能由父组件传递给子组件,不能从子组件传递给子组件
那么咱们的@Link装修器
则是能够进行双向传递
咱们只需求把之前代码的@Prop
改成@Link
即可
这回能够进行双向通讯
了
@Provide装修器和@Consume装修器
父子通讯完事了,咱们能够进行跨级别通讯了,也便是爷孙传值
@Entry
@Component
struct Grandpa {
@Provide name: string = 'shaka'
build() {
Row() {
Column({ space: 20 }) {
Text(this.name)
.onClick(() => {
this.name = '这是爷组件改动的'
})
.backgroundColor(Color.Gray)
.width(200)
.height(100)
.fontSize(50)
Divider()
Father()
}.width('100%')
}.height('100%')
}
}
@Component
struct Father {
build() {
Column({ space: 20 }) {
Text('这是子组件')
.backgroundColor(Color.Red)
.width(200)
.height(100)
.fontSize(50)
Divider()
Des()
}
}
}
@Component
struct Des {
@Consume name: string
build() {
Column() {
Text( this.name)
.onClick(() => {
this.name = '这是孙组件改动的'
})
.backgroundColor(Color.Orange)
.width(200)
.height(150)
.fontSize(50)
}
}
}
需求留意的是@Provide
和@Consume
装修的变量名应保持一致,或者用变量别号
这儿官网给了示例
效果是一样的
这样能够进行爷孙传值
,并且是双向
的
结束
大致介绍了一下,ArcTS中的状况办理,以及各种传值,对于触摸过其他结构的朋友了解起来十分轻松
其间 @Observed装修器和@ObjectLink装修器
是针对于嵌套的数据类型,其实首要针对的便是class的方式
而关于class类型的数据类型,其实便是面向对象编程
思想
这是一种思想,并不算ArcTS的内容,所以我没有讲,如果真的实践用到了,我到时候会大致说一下的,所以不算是这儿的要点
下节我会讲一些剩下的较为基础和项目结构的知识点,然后再往下就进入到项目,遇到什么就讲什么
期望对您有帮助