HarmonyOS ArkTS基础语法
前提:安装开发工具
教程:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387
基本代码中的各种组件
// 前三行代码为 装饰器:装饰类、结构、方法和变量,富裕其特殊含义
@Component // 自定义组件
struct ListItemComponent { // 自定义的结构体
@State isChange: boolean = false; //@State也是自定义组件 当isChange的值发生改变时,就会触发对应的自定义组件@Component的UI界面的刷新
build() { // UI描述:声明式的方式描述UI结构
Row() { // 内置组件:系统提供的基础组件和容器组件等,可以直接调用
Text(this.name) // Row 表示一个水平布局组件 Text 表示一个文本组件
.width(ItemStyle.LAYOUT_WEIGHT_CENTER)
.fontSize(FontSize.MIDDLE) // 属性方法:设置组件的属性
Text(this.vote)
.width(ItemStyle.LAYOUT_WEIGHT_CENTER)
.fontSize(FontSize.SMALL)
}
.height(ItemStyle.BAR_HEIGHT)
.width(WEIGHT)
.onClick(() => { // 事件方法:设置组件对事件的响应逻辑
this.isChange = !this.isChange;
})
}
}
效果图

组件类别
基础组件
- Text
- Button
- Image
- TextInput
容器组件
- Column
- Row
- Stack
- List
- ......
自定义组件
- 将多个基础组件或容器组件结合,抽象成为一个自定义组件,方便在其他页面中进行更加灵活的调用
创建一个自定义组件
定义名为TitleComponent的自定义组件
@Component // @Component装饰的struct表示该结构体具有组件化能力,能够成为一个独立的组件
struct TitleComponent {
...
build() { // 自定义组件必须定义build方法,在其中进行UI描述
...
}
}
定义名为RankPage的自定义组件,在其中使用TitleComponent组件( !! 一个页面有且仅有一个@Entry装饰的组件)
@Entry // @Entry装饰的自定义组件用作页面的默认入口组件,在页面加载时,将首先创建并呈现@Entry装饰的自定义组件
@Component
struct RankPage { // 父组件
...
build() {
Column() {
TitleComponent() // 子组件
}
}
}

组件的模块化与导入
首先要将组件使用export关键字导出
@Component // @Component装饰的struct表示该结构体具有组件化能力,能够成为一个独立的组件
export struct TitleComponent { // 首先要将组件使用export关键字导出
...
build() { // 自定义组件必须定义build方法,在其中进行UI描述
...
}
}
使用import组件导入TitleComponent组件
improt { TitleComponent } from '../view/TitleComponent'
@Entry // @Entry装饰的自定义组件用作页面的默认入口组件,在页面加载时,将首先创建并呈现@Entry装饰的自定义组件
@Component
struct RankPage { // 父组件
...
build() {
Column() {
TitleComponent() // 子组件
}
}
}
自定义组件生命周期回调
@Component装饰的自定义组件
- aboutToAppear() : 组件创建之后,build方法执行之前触发
- aboutToDisappear() : 组件实例被销毁之前触发,用于释放一些不再使用的资源
@Component
struct RankPage {
@state dataSource1: RankData[] = [];
@state dataSource2: RankData[] = [];
...
aboutToAppear() { // 组件创建之后,执行build方法之前触发
console.log( ${TAG} aboutToAppear );
this.dataSource1 = rankModel.loadRankDataSource1();
this.dataSource2 = rankModel.loadRankDataSource2();
} aboutToDisappear() { // 组件实例被销毁之前触发的 用于释放一些不再使用到的资源
console.log( ${TAG} aboutToDisappear );
}
}

@Entry装饰的自定义组件
- 在@Component组件基础上多了三个生命周期回调
- onPageShow():页面展示时(build执行之后)触发
- onPageHide():页面消失时触发
- onBackPress():按下返回键时触发
@Entry
@Component
struct RankPage {
...
onPageShow() {
console.log( ${TAG} onPageShow );
}
onPageHide() {
console.log( ${TAG} onPageHide );
}
onBackPress() {
return false;
}
}

渲染控制语法
条件渲染:使用if/else
Column() {
if (this.count > 0) {
Text('count is positive')
}
}

循环渲染:使用ForEach迭代数组,并为每个数组项创建相应的组件
ForEach(
arr: any[], // 用于迭代的数组
itemGenerator: (item: any, index?: number) => void, // 生成子组件的lambda函数
keyGenerator?: (item: any, index?: number) => string // 用于给定数组项生成唯一且稳定的键值
)


组件状态管理
@State装饰的变量是组件内部的状态数据,当状态数据被修改时,会自动进行UI刷新
@Component
struct ListItemComponent {
@State isChange: boolean = false; //@State装饰的变量是组件内部的状态数据,当状态数据被修改时,会自动进行UI刷新
build() {
Row() {
Text(this.name)
.fontColor(this.isChange ? ItemStyle.COLOR_BLUE : ItemStyle.COLOR_BLACK) // 点击一下即变色
Text(this.vote)
.fontColor(this.isChange ? ItemStyle.COLOR_BLUE : ItemStyle.COLOR_BLACK)
}
.height(ItemStyle.BAR_HEIGHT)
.width(WEIGHT)
.onClick(() => { // 事件方法:设置组件对事件的响应逻辑
this.isChange = !this.isChange;
})
}
}
所示代码实现了选中变色的功能

@Link装饰的变量可以和父组件的@State变量建立双向数据绑定。任何一方所做的修改都会反映给另一方。

双向绑定操作

HarmonyOS ArkTS基础语法的更多相关文章
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- iOS-----正则表达式的基础语法
正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- emmet 系列(1)基础语法
emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
- javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
随机推荐
- TS:菜单数组转树形,支持多级(递归)
方法一 import {menus} from './menus.ts' function listToTree(list: any = [], options = {}, data = null) ...
- scratch源码下载 | 蜘蛛传说
程序说明: <蜘蛛传说>是一个通过Scratch平台制作的互动游戏项目.在这个故事中,玩家将扮演一只蜘蛛,其原本和平的生活被一只入侵的壁虎所打破.为了保卫自己的家园,蜘蛛必须运用智慧和勇气 ...
- 我用Awesome-Graphs看论文:解读X-Stream
X-Stream论文:<X-Stream: Edge-centric Graph Processing using Streaming Partitions> 前面通过文章<论文图谱 ...
- 7月24号python:库存管理
7月24号python:库存管理 题目: 仓库管理员以数组 stock 形式记录商品库存表.stock[i] 表示商品 id,可能存在重复.原库存表按商品 id 升序排列.现因突发情况需要进行商品 ...
- 【Layui】10 颜色选择器 ColorPicker
文档地址: https://www.layui.com/demo/colorpicker.html 常规选择器: <fieldset class="layui-elem-field l ...
- SourceGenerator 生成db to class代码优化结果记录 二
优化 在上一篇留下的 Dapper AOT 还有什么特别优化点的问题 在仔细阅读生成代码和源码之后,终于得到了答案 个人之前一直以为 Dapper AOT 只用了迭代器去实现,所以理应差不多实现代码却 ...
- 神州笔记本 win11 节能模式 供电不足 自动关机
刚刚买了一个神州笔记本没几天,用着用着就出现问题了. 本人使用电脑有个极为不好的习惯,那就是会一次性打开特别多的应用,然后不关,一直留着,这个习惯虽然不好但也是一直没有啥问题的,不过最近换了个新的笔记 ...
- 电脑时间不同步导致的上网报错:core/proxy/vmess/encoding: failed to read response header > websocket: close 1006 (abnormal closure): unexpected EOF
报错内容: 2023/12/16 14:08:56 [Warning] [775541588] xxxxx.com/core/app/proxyman/outbound: failed to proc ...
- Linux系统——删除用户命令
背景: 负责管理实验室的服务器,近期有保研的大三同学放弃保送到实验室而选择其他实验室,因此需要把之前给他开的账号取消掉. ===================================== ...
- 聊一聊 Netty 数据搬运工 ByteBuf 体系的设计与实现
本文基于 Netty 4.1.56.Final 版本进行讨论 时光芿苒,岁月如梭,好久没有给大家更新 Netty 相关的文章了,在断更 Netty 的这段日子里,笔者一直在持续更新 Linux 内存管 ...