HarmonyOS开发:ArkTS初识

server/2025/1/11 6:37:58/

ArkTS基本语法

ArkTS语言简介

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

基本语法概述

扩展能力

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

@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描述

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

Column() {//无参数Text('item 1')//有参数Divider()//无参数Text('item 2')
}

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

image组件的必须参数src

Image('https://xyz/test.jpg')

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

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

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

Image(this.imagePath)
Image('https://' + this.imageUrl)
Text(`count: ${this.count}`)

配置属性

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

Text('hello').fontSize(20).fontColor(Color.Red).fontWeight(FontWeight.Bold)

配置事件

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

//箭头函数
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))

自定义组件

自定义组件的基本结构

@Entry
@Component
struct MyComponent {
}

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

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

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

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

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

成员函数/变量

成员变量:
1.不支持静态成员变量

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

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

@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.someColorMyComponent({ countDownFrom: 10, color: this.someColor })}}
}

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

生命周期

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

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

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

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

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

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

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

参数传递

参数传递原则

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

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

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

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

引用传递函数

CiteData($$: {name: string,age: number}) {}//创建函数{$$.name} //使用参数this.CiteData({ name:this.title,age: 10 }) //使用函数

按值传递函数

ValueData(name: string, age: number){}//创建函数name //使用参数this.ValueData("xxx",10)//使用函数
@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}`) //使用方式}


http://www.ppmy.cn/server/157392.html

相关文章

系统架构设计师考点—计算机网络

一、备考指南 计算机网络知识主要考查的是网络体系结构、网络协议、IP地址、网络规划设计等,同时也是重点考点,在系统架构设计师的考试中只会在选择题里考查,占3~5分。 二、计算机按分布范围分类 三、传输介质 1、双绞线 双绞线将多根铜线按…

【GIt原理与使用】Git远程仓库

一、理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统!什么意思呢&#xff1f…

micro-app【微前端系列教程】禁用样式隔离

全局禁用样式隔离 所有应用的样式隔离都会停止 import microApp from micro-zoe/micro-appmicroApp.start({disableScopecss: true, // 默认值false })指定子应用取消禁用样式隔离 <micro-app namexx urlxx disableScopecssfalse></micro-app>指定子应用禁用样式…

Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡

将 ProxySQL 配合 Spring Boot 使用&#xff0c;主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样&#xff0c;你可以利用 ProxySQL 自动将写操作路由到主库&#xff0c;而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…

PHP民宿酒店预订系统小程序源码

&#x1f3e1;民宿酒店预订系统 基于ThinkPHPuniappuView框架精心构建的多门店民宿酒店预订管理系统&#xff0c;能够迅速为您搭建起专属的、功能全面且操作便捷的民宿酒店预订小程序。 该系统不仅涵盖了预订、退房、WIFI连接、用户反馈、周边信息展示等核心功能&#xff0c;更…

机器人避障不再“智障”:HEIGHT——拥挤复杂环境下机器人导航的新架构

导读&#xff1a; 由于环境中静态障碍物和动态障碍物的约束&#xff0c;机器人在密集且交互复杂的人群中导航&#xff0c;往往面临碰撞与延迟等安全与效率问题。举个简单的例子&#xff0c;商城和车站中的送餐机器人往往在人流量较大时就会停在原地无法运作&#xff0c;因为它不…

intra-mart配置多数据源与查询SQL样例

一、前言 intra_mart框架是一种基于Java语言的企业级应用开发框架。配备有标准工作流、文档管理、企业内部门户等可开发组件&#xff0c; 能够融合顾客实际业务&#xff0c;按需求进行自定义开发&#xff0c;实现短期间、低成本的系统构筑。 个人感觉主要是供企业管理使用的框…

【Flink】flink或java异常日志输出不完整问题解决

flink或java异常日志输出不完整问题解决 1.问题 flink submit job&#xff0c;报错查看日志&#xff0c;只有Caused by: java.lang.ClassCastException&#xff0c;异常详情没有&#xff0c; 2.网上参考 参考了网上的几个解决方案&#xff0c;比较精准的如下&#xff1a; https…