鸿蒙开发笔记(一):ArkTS概述及声明式UI的使用

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。

ArkTS在TS的基础上主要扩展了如下能力:

  • 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。

  • 状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和UI的联动。

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

1. 基本语法

1.1 概述

ArkTS的基本组成如下所示:
在这里插入图片描述

  • 装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。
    相当于Java开发中的注解

  • UI描述:以声明式的方式来描述UI的结构,例如build()方法中的代码块。

  • 自定义组件:可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello。

  • 系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的Column、Text、Divider、Button。

  • 属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。

  • 事件方法:组件可以通过链式调用设置多个事件的响应逻辑,如跟随在Button后面的onClick()。

除此之外,ArkTS扩展了多种语法范式来使开发更加便捷:

  • @Builder/@BuilderParam:特殊的封装UI描述的方法,细粒度的封装和复用UI描述。
  • @Extend/@Style:扩展内置组件和封装属性样式,更灵活地组合内置组件。
  • stateStyles:多态样式,可以依据组件的内部状态的不同,设置不同样式。

1.2 声明式UI描述

ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。

根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。创建组件时不需要new运算符。

1. 无参数

如果组件的接口定义没有包含必选构造参数,则组件后面的“()”不需要配置任何内容。例如,Divider组件不包含构造参数:

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

如果组件的接口定义包含构造参数,则在组件后面的“()”配置相应参数。

Image组件的必选参数src。

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

Text组件的非必选参数content。

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

变量或表达式也可以用于参数赋值,其中表达式返回的结果类型必须满足参数类型要求。例如,设置变量或表达式来构造Image和Text组件的参数。

Image(this.imagePath)
Image('https://' + this.imageUrl)
Text(`count: ${this.count}`)
3. 配置属性

属性方法以“.”链式调用的方式配置系统组件的样式和其他属性,建议每个属性方法单独写一行。
除了直接传递常量参数外,还可以传递变量或表达式。

Text('hello')
  .fontSize(this.size)
Image('test.jpg')
  .width(this.count % 2 === 0 ? 100 : 200)    
  .height(this.offset + 100)

对于系统组件,ArkUI还为其属性预定义了一些枚举类型供开发者调用,枚举类型可以作为参数传递,但必须满足参数类型要求。例如,可以按以下方式配置Text组件的颜色和字体样式。

Text('hello')
  .fontSize(20)
  .fontColor(Color.Red)
  .fontWeight(FontWeight.Bold)
4. 配置事件

事件方法以“.”链式调用的方式配置系统组件支持的事件,建议每个事件方法单独写一行。

使用lambda表达式配置组件的事件方法。

Button('Click me')
  .onClick(() => {
    this.myText = 'ArkUI';
  })

使用匿名函数表达式配置组件的事件方法,要求使用bind,以确保函数体中的this指向当前组件。

Button('add counter')
  .onClick(function(){
    this.counter += 2;
  }.bind(this))

使用组件的成员函数配置组件的事件方法。

myClickHandler(): void {
  this.counter += 2;
}
...
Button('add counter')
  .onClick(this.myClickHandler.bind(this))
5. 配置子组件

如果组件支持子组件配置,则需在尾随闭包"{…}"中为组件添加子组件的UI描述。Column、Row、Stack、Grid、List等组件都是容器组件。

以下是简单的Column组件配置子组件的示例。

Column() {
  Text('Hello')
    .fontSize(100)
  Divider()
  Text(this.myText)
    .fontSize(100)
    .fontColor(Color.Red)
}

容器组件均支持子组件配置,可以实现相对复杂的多级嵌套。

Column() {
  Row() {
    Image('test1.jpg')
      .width(100)
      .height(100)
    Button('click +1')
      .onClick(() => {
        console.info('+1 clicked!');
      })
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/313990.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++内存管理机制(侯捷)笔记3

C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第三讲:malloc和…

波动,热传导,扩散方程建立

数学物理方程是从自然科学的各个领域和工程技术领域中导出的偏微分方程和积分方程.在这些以偏微分方程为基础的数学模型中,二阶线性偏微分方程中的三个典型方程与定解条件的建立、解法及其应用.描述振动和波动过程的波动方程、描述输运过程的热传导&…

【笔记】Blender4.0建模入门-1、2

Blender入门 ——邵发 1.1 课程介绍 Blender,一款3D建模软件,小乔、免费、全流程 常见的3D建模软件: - 3DsMax/Maya/Blender/Cinema4D/ZBrush...游戏影视 - Proe/Solidworks/Inventor/UG...工业建模 - SketchUp/Rhino/Revit...建筑设计 …

想要简化重复订单吗?不妨考虑一揽子采购订单

企业想提高采购流程效率,简化大批量采购是一个很好的开始。财务、会计和采购部门通过系统化订购大量物品(如纸张、打印机墨水和墨粉、清洁用品、纸制品和其他易重复采购的消耗品)可以节省时间和金钱。借助正确的采购订单(PO&#…

俩万字详解C++STL期末复习知识点(C++STL课本源码私信可得)

邸老师复习建议 复习注意事项 1 不考死记硬背的题,比如名词解释。 2 选择题重点考核宏观性、综合性的问题,比如:把电话通讯录存入容器,该选哪一个容器? 3 选择题重点考核理解性的问题,比如,…

C语言——(printf和scanf介绍)

一.printf 1.基本用法 printf()的作用是将参数文本输出的屏幕。如下; 2.占位符 printf()可以在输出文本中指定占位符 ,“占位符”,也就是这个位置可以用其他值代入。 如: …

竞赛保研 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …

小魔推行业玩法:生活美容怎么做短视频矩阵?

如今每个实体老板都想让自己生意做的更好,那就需要有更多获取流量的方式,获得大量的同城曝光;在市场内卷的状况下,通过短视频来做门店引流无疑是绝佳的方式,让更多同城的用户知晓自己的门店,这个时候通过小…

HarmonyOS4.0系统性深入开发18公共事件简介

公共事件简介 HarmonyOS通过CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件:CES内部定义的公共事…

对比学习2024最新SOTA&应用方案分享,附14篇必读论文和代码

同学们发现没有,对比学习在我们的日常工作生活中已经很常见了,比如推荐系统任务,为用户推荐相似的商品或预测用户的购买行为;又比如图像检索,为用户找相似图片或识别不同物体。另外还有语音识别、人脸识别、NLP&#x…

43-函数的声明定义,函数表达式定义,函数的调用,声明提升,参数,形参,实参

1.函数声明定义 function 函数名(){} 2.函数表达式定义 匿名式函数表达式 var 函数名 function(){} 命名式函数表达式 var 函数名 function 函数关键字(){} 3.函数的调用 var fn function f(){alert("aaa");}//函数名()//函数想调用几次…

京东年度数据报告-2023全年度游戏本十大热门品牌销量(销额)榜单

同笔记本市场类似,2023年度游戏本市场的整体销售也呈下滑态势。根据鲸参谋电商数据分析平台的相关数据显示,京东平台上游戏本的年度销量累计超过350万,同比下滑约6%;销售额将近270亿,同比下滑约11%。 鲸参谋综合了京东…

7、防写一个shell 命令解释器

1、代码部分 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_INPUT_LENGTH 100void parse_command(char *command) {// 用于存储解析后的命令和参数char cmd[MAX_INPUT_LENGTH];char args[MAX_INPUT_LENGTH];// 将输入的命令拷贝到…

Java Swing 图书借阅系统 窗体项目 期末课程设计 窗体设计

视频教程&#xff1a; 【课程设计】图书借阅系统 功能描述&#xff1a; 图书管理系统有三个角色&#xff0c;系统管理员、图书管理员、借阅者&#xff1b; 系统管理员可以添加借阅用户&#xff1b; ​图书管理员可以添加图书&#xff0c;操作图书借阅和归还&#xff1b; 借…

JDK安装与配置教程来啦

1.从Oracle公司官网下载JDK安装文件。 官网地址为&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 目前最新版本是JDK21,下面就以JDK21举例。 2.需要登录Oracle账户&#xff0c;没有的注册一下就行了。 3.在确认安装的盘符&#xff08;例…

Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException(数组创建问题)

数组在Java中使用还是比较多的&#xff0c;通过索引去数组中寻值&#xff0c;也可以通过数组索引去赋值 问题描述&#xff1a; 我们在直接使用未被new的数组时就会出现这种情况&#xff0c; 这边简单创建一个运行类 public class a {public static void main(String[] args)…

基于LVGL编写的windows串口工具: LCOM

LCOM: Serial Port Tools based on LVGL (PC Software) 一直以来我都想用LVGL做一个真正意义上的PC软件&#xff0c;来验证或者表达LVGL出色的特性&#xff0c;现在我用LCOM做到了&#xff01; LCOM 是一个基于LVGL编写的串口工具&#xff0c;界面简洁&#xff0c;功能出色&a…

更快更稳的4K响应鼠标,小手玩家也能用,雷柏VT9PRO mini

雷柏今年推出了不少新品&#xff0c;特别是一系列支持4K回报率的鼠标&#xff0c;凭借敏捷的响应速度&#xff0c;获得了非常好的评价。不过之前雷柏出的4K鼠标都多适合中大手&#xff0c;对小手用户不友好&#xff0c;而且配色较少&#xff0c;都是黑白色的基础款&#xff0c;…

数字集成系统设计——物理设计

目录 一、布局规划 1.1 规划 1.2 I/O单元 1.3 电源网络 1.3.1 要求 1.3.2 网络架构 1.3.3 混合信号芯片示例 1.4 布局 二、时钟分布 2.1 时钟偏斜 2.2 时钟分布网络 2.3 时钟树综合 2.4 时钟树收敛 三、布线与参数提取 3.1 布线(Routing) 3.2 布线规则示例 …

这是一家有图书馆的公司

Tubi 技术团队的同事们&#xff0c;除了爱写书、翻译书&#xff0c;也很爱读书。应广大爱书人号召&#xff0c;Tubi 中国团队从 2018 年 7 月开始兴建 Tubi 小书架&#xff0c;迄今已建成了一个有着17 种类别、近 500 本藏书、100 位常驻借阅成员、以音视频开发、广告推荐和团队…