HarmonyOS开发:ArkTS初识

ArkTS基本语法

ArkTS语言简介

ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript(简称TS)相似,在TS的生态基础上进一步扩展,继承了TS的所有特性,是TS的超集。

基本语法概述

扩展能力

基础语法:声明式语法,组件化机制,数据-UI自动关联

css 复制代码
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            this.message = "你好,世界"
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

状态管理:ArkTS提供了多维度的状态管理机制。比如数据传递可以在父子组件之间,爷孙组件之间,还可以应用全局范围传递或者跨设备传递。同时,数据的传递可以只单向传递和可变更的双向传递。

渲染控制:条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。

装饰器:装饰类、结构、方法以及变量。比如:

@Component自定义组件,

@Entry自定义组件为入口组件,

@State组件的状态变量,会触发UI刷新。

UI描述:声明式方式描述UI

系统组件:ArkUI提供的组件

容器组件:用来完成页面布局,例如 RowColumn

基础组件:自带样式和功能的页面元素,例如 Text

属性方法:设置组建的UI样式

事件方法:设置组件的事件回调

声明式UI描述

无参数和有参数组件:通过代码可以看得出来,组件后面"()"有没有配置内容,有就是有参,无则是无参。

css 复制代码
Column() {//无参数
  Text('item 1')//有参数
  Divider()//无参数
  Text('item 2')
}

在有参数的组件配置参数格式如下:

image组件的必须参数src

css 复制代码
Image('https://xyz/test.jpg')

应用资源采用$r形式引用

css 复制代码
// string类型的参数
Text('test')
// $r形式引入应用资源,可应用于多语言场景
Text($r('app.string.title_value'))
// 无参数形式
Text()

变量或者表达式也可以参数赋值,字符串变量嵌套采取${}

Kotlin 复制代码
Image(this.imagePath)
Image('https://' + this.imageUrl)
Text(`count: ${this.count}`)

配置属性

属性方法以"."链式调用,比如fontSize(30)、width(this.width)、。具体有什么属性根据组件类型来判断,属性方法和其他语言的属性大同小异。

Kotlin 复制代码
Text('hello')
  .fontSize(20)
  .fontColor(Color.Red)
  .fontWeight(FontWeight.Bold)

配置事件

事件方法以"."链式调用的方式配置系统组件支持的事件。

Kotlin 复制代码
//箭头函数
Button('Click me')
  .onClick(() => {
    this.myText = 'ArkUI';
  })
  
//匿名函数表达式
Button('add counter')
  .onClick(function(){
    this.counter += 2;
  }.bind(this))//使用bind,以确保函数体中的this指向当前组件

//调用函数
myClickHandler(): void {
  this.counter += 2;
}
...
Button('add counter')
  .onClick(this.myClickHandler.bind(this))

自定义组件

自定义组件的基本结构

Kotlin 复制代码
@Entry
@Component
struct MyComponent {
}

struct + 自定义组件名 + {...}的组合构成自定义组件,不能有继承关系

@Component仅装饰struct关键字声明的数据结构,一个struct只能被一个@Component装饰。

build()函数用于定义自定义组件的声明式UI描述。

@Entry装饰该自定义组件为UI页面的入口,@EntryUI页面的关系是一对一

tips:自定义组件固定格式必有struct、@Component、build()

成员函数/变量

成员变量:

1.不支持静态成员变量

2.成员变量都是有私有的

3.成员变量的初始化可选可必选

Kotlin 复制代码
@Component
struct MyComponent {
  private countDownFrom: number = 0;
  private color: Color = Color.Blue;

  build() {
  }
}

@Entry
@Component
struct ParentComponent {
  private someColor: Color = Color.Pink;

  build() {
    Column() {
      // 创建MyComponent实例,并将创建MyComponent成员变量countDownFrom初始化为10,将成员变量color初始化为this.someColor
      MyComponent({ countDownFrom: 10, color: this.someColor })
    }
  }
}

页面和组件的生命周期和参数传递

生命周期

页面生命周期**(@Entry装饰的组件生命周期)**

onPageShow:页面每次显示时触发。

onPageHide:页面每次隐藏时触发一次。

onBackPress:当用户点击返回按钮时触发。

组件生命周期(@Component装饰的自定义组件的生命周期)

aboutToApper:组件即将出现时回调该接口;引用组件实例后,执行其build函数之前。

aboutToDisapper:在自定义组件即将销毁时执行

参数传递

参数传递原则

参数类型和参数声明类型一致,不能为null、undefined、undefined或者null的表达式

在函数内部,参数值不可修改,如要修改,可以采取同步回调

参数传递分为按引用传递参数和按值传递

特别注意:传递的参数为状态变量时,按值传递不能引起UI刷新,引用传递可以UI刷新

引用传递函数

javascript 复制代码
CiteData($$: {name: string,age: number}) {}//创建函数

{$$.name} //使用参数

this.CiteData({ name:this.title,age: 10 }) //使用函数

按值传递函数

javascript 复制代码
ValueData(name: string, age: number){}//创建函数

name //使用参数

this.ValueData("xxx",10)//使用函数
javascript 复制代码
@Component
struct child {
  @State title: string = "无名氏"

  build() {
    Row() {
      Column() {
        this.ValueData(this.title,10)//按值传递 调用方式
        this.CiteData({ name:this.title,age: 10 })// 引用传递 调用方式
        Button("点击改变值").onClick(()=>{
          this.title = '张三'
          //结果:引用传递的name的UI刷新了,按值传递的name的UI没变化
        })
      }
      .width('100%')
    }
    .height('100%')
  }

  @Builder CiteData($$: {
    name: string,
    age: number
  }) { //引用传递
    Text(`引用传递:${$$.name}的年龄是${$$.age}`) //使用方式
  }

  @Builder ValueData(name: string, age: number) { //按值传递
    Text(`按值传递:${name}的年龄是${age}`) //使用方式
  }
相关推荐
m0_726965981 小时前
Harmony开发【笔记1】报错解决(字段名写错了。。)
笔记·bug·debug·harmonyos
别说我什么都不会5 小时前
OpenHarmony图形处理库—pyclipper [GN编译]
harmonyos·opengl
AIGC方案5 小时前
华为IPD成功案例分析
华为
塞尔维亚大汉6 小时前
移植案例与原理 - utils子系统之KV存储部件 (3)
操作系统·harmonyos
goodbruce7 小时前
HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
harmonyos
轻口味7 小时前
【每日学点鸿蒙知识】调试、网络、缓存、富文本编辑等
缓存·华为·harmonyos
MarkHD7 小时前
第一天 了解HarmonyOS的起源、发展、核心特性
华为·harmonyos
御承扬8 小时前
从零开始开发纯血鸿蒙应用之实现起始页
华为·harmonyos·arkts·应用起始页·ui设计思路
执着的小火车9 小时前
【2024华为OD-E卷-100分-boss的收入】(题目+思路+Java&C++&Python解析)
数据结构·算法·华为od·华为·排序算法
肾透侧视攻城狮9 小时前
基于华为ENSP的OSPF数据报文保姆级别详解(3)
网络·网络协议·网络安全·华为·信息与通信·ospf·dr/bdr