前言

上一节简略开篇,进行了准备工作和一些ArcTS的根本语法,这篇首要讲数据方面,首要便是状况办理传值,是很要点的一方面,所以并没有和上一节放在一起,这部分有些人会发现和其他结构有相似之处,我也期望咱们不要说抄谁抄谁的,毕竟像的话对开发者来说能够很大一部分下降学习成本,并没有什么欠好的

好的,咱们开端吧~

状况办理

@State

@State是一个装修器,是用来寄存数据的,比较好了解,而且在之前的代码比如咱们就现已见过了

由@State的数据来进行状况驱动视图更新

代码很简略

@State count: number = 0;

需求留意的是@State初始化的数据有必要赋值

这儿咱们评论简略用法,至于复杂的用法能够到项目中介绍

传值

关于传值,官网给了一张图片,咱们现在只重视组件的传值即可

敞开鸿蒙HarmonyOS之旅(二:状况办理,传值)

通过这个图咱们调查出,有父母,有孩子,有子孙,这表现出了组件之间的层级联系,有层级了才能表现出传递性

一起咱们还发现,有的箭头是单向的,有的是双向的,所以证明父-子-孙之间是能够相互进行数据传递的,其间就会有单层传递,也能够跨层传递,所以就会有不同的装修器来完结对应的功用

其实根据这个图,有其他结构学习经历的朋友现已大概了解了,也能看出来哪个是单向的装修器,哪个是双向的,以及哪个是跨级的了

那咱们挨个介绍吧~

@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装修器

父子通讯完事了,咱们能够进行跨级别通讯了,也便是爷孙传值

敞开鸿蒙HarmonyOS之旅(二:状况办理,传值)

@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装修的变量名应保持一致,或者用变量别号

这儿官网给了示例

敞开鸿蒙HarmonyOS之旅(二:状况办理,传值)

敞开鸿蒙HarmonyOS之旅(二:状况办理,传值)

效果是一样的

这样能够进行爷孙传值,并且是双向

结束

大致介绍了一下,ArcTS中的状况办理,以及各种传值,对于触摸过其他结构的朋友了解起来十分轻松

其间 @Observed装修器和@ObjectLink装修器是针对于嵌套的数据类型,其实首要针对的便是class的方式

而关于class类型的数据类型,其实便是面向对象编程思想

这是一种思想,并不算ArcTS的内容,所以我没有讲,如果真的实践用到了,我到时候会大致说一下的,所以不算是这儿的要点

下节我会讲一些剩下的较为基础和项目结构的知识点,然后再往下就进入到项目,遇到什么就讲什么

期望对您有帮助