首页 > 其他分享 >HarmonyOS ArkTS基础语法

HarmonyOS ArkTS基础语法

时间:2023-03-25 21:26:26浏览次数:48  
标签:ArkTS struct 自定义 isChange Component 语法 HarmonyOS build 组件

前提:安装开发工具 

      教程: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变量建立双向数据绑定。任何一方所做的修改都会反映给另一方。

双向绑定操作

 

标签:ArkTS,struct,自定义,isChange,Component,语法,HarmonyOS,build,组件
From: https://www.cnblogs.com/1873cy/p/17255461.html

相关文章

  • 《Java》学习随笔 1、基础语法
    1Java基础语法1.1基本概念一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对......
  • 初识vue3-setup语法糖,ref和reactive语法,computde计算属性,watch开启监听
    vue3和vue2的区别1,vue3首次渲染更快(Vue3在编译和渲染性能上有了很大的提升,主要是因为使用了Proxy代理和优化算法,使得组件可以更快的渲染)2,diff算法更快3,内存占用体积......
  • MongDB语法与快速入门
    一、MongDB简介1.概念 MongoDB是一个开源的文档型NoSQL数据库,它支持的数据模型是面向文档的,使用了类似JSON的BSON(二进制JSON)格式来存储数据,且提供了动态查询和索引功能......
  • asp.net core3.1使用EF Core出现:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT
    asp.netcore3.1使用EFCore3.1有毒efcore3.1遇到sqlserver2008'OFFSET'附近有语法错误。\r\n在FETCH语句中选项NEXT的用法无效。这就很烦,想加个EntityFrame......
  • 简介、程序结构、基本语法
    C简介​ C语言是一种通用的、面向过程式的计算机程序设计语言。1972年,为了移植与开发UNIX操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了C语言。UNIX操作系统,C......
  • Markdown语法学习
    Markdown学习标题:#+空格+标题名字二级标题##+空格+标题名字三级标题同理最多六级标题字体Hello,World!粗体:两边+**Hello,World!斜体:两边+*Hello,World!粗......
  • velocity简单的语法
    单行注释多行注释**sdxxz**#非解析内容:[[里面的内容不会被解析,包括一些特殊符号]]#变量引用:常规语法:$name正规语法:\({name}如果拿不到想用空串表示可......
  • 存储过程基本语法
    存储过程特定功能的的SQL指令进行封装编译之后存储在数据库服务器中客户端通过名字调用这个SQL指令集优点:防止SQL在网络中恶意修改无需客户端编写通过网络传送存......
  • 详解shell语法检查模式
    启用verbose调试模式在进入本指导的重点之前,让我们简要地探索下 verbose模式。它可以用-v调试选项来启用,它会告诉 shell 在读取时显示每行。要展示这个如何工作,下......
  • H.265编码协议---SPS语法解析
    一、背景  最近搞Intel平台的多路复用视频解码,发现某些视频会报解码不兼容参数的报错,分析MFX的源码(如下图所示),解码实例通过对比新旧的SPS部分参数来判断是否是相同的......