前提:安装开发工具

      教程: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基础语法的更多相关文章

  1. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  2. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  3. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  4. emmet 系列(1)基础语法

    emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...

  5. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  6. Java基础语法

    java基础学习总结——基础语法1 一.标识符

  7. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  8. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  9. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  10. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

随机推荐

  1. Linux 提权-NFS 共享

    本文通过 Google 翻译 NFS Share no_root_squash – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校 ...

  2. JavaScript小技巧~this的保存

    在JavaScript中如果一个函数返回一个函数,此时this容易丢失,为了不使this丢失,需要在函数内部保存this. change() { let _this=this return funct ...

  3. JMeter+Ant+Jenkins接口自动化测试框架(Windows)

    一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起 ...

  4. RESTful服务与swagger

    一开始刚学springboot的时候 restful服务+swagger一点都看不懂,现在知识学了一些,再回头看这些东西就简单很多了. 自己跟视频做了一个零件项目,里面写了一些零零散散的模块,其中在视 ...

  5. pytest + 登录禅道 :自动提交bug-编辑bug-确认bug-解决bug-关闭bug

    pytest +  登录禅道 :自动提交bug-编辑bug-确认bug-解决bug-关闭bug 一.Pycharm中创建项目结构 1.新建一个工程,工程名称自己定义,如:zentao 2.在工程的根目 ...

  6. 【Hibernate】01 概述

    什么是Hibernate? - Hibernate是我们JavaEE开发中的DAO层框架 - DAO[Data Access Object] 数据访问对象层 - 在DAO层,访问数据库,进行CRUD操 ...

  7. python数据分析与可视化基础

    一.数据分析介绍:1.数据分析含义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用.数据分析是为了提取有用信息和形成 ...

  8. 在单机条件下,MPI4PY与纯Python多进程代码来比较是否有性能优势???

    如题: 最近在看MPI4PY的代码,但是发现这东西除了编写简洁外(少量代码实现复杂的多进程通信,包括单机和多机),好像也没有别的太多功能,当然MPI本身在多机通信广播.规约上做的很成熟,但是假设我们只 ...

  9. ubuntu23.04/22.04下安装docker engine

    官方网址: https://docs.docker.com/engine/install/ubuntu/ 2023年12月1日更新 -- Ubuntu 23.04 # Add Docker's off ...

  10. 【转载】python的魔法方法———A Guide to Python's Magic Methods

    原文地址: https://rszalski.github.io/magicmethods/ ===================================================== ...