首页 > 其他分享 >鸿蒙UI开发快速入门 —— part02: 组件开发

鸿蒙UI开发快速入门 —— part02: 组件开发

时间:2024-06-11 23:04:07浏览次数:17  
标签:自定义 鸿蒙 part02 反例 UI build 组件 函数

1. 组件基本介绍

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。

自定义组件具有以下特点:

  • 可组合:允许开发者组合使用系统组件、及其属性和方法。

  • 可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。

  • 数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。

以下示例展示了开发一个组件的基本用法。

@Componentexport struct HelloComponent {  @State message: string = 'Hello, World!';  build() {    // HelloComponent自定义组件组合系统组件Row和Text    Row() {      Text(this.message)        .onClick(() => {          // 状态变量message的改变驱动UI刷新,UI从'Hello, World!'刷新为'Hello, ArkUI!'          this.message = 'Hello, ArkUI!';        })    }  }}

HelloComponent可以在其他自定义组件中的build()函数中多次创建,实现自定义组件的重用。​​​​​​​

@Entry@Componentstruct ParentComponent {  build() {    Column() {      Text('ArkUI message')      // 这里复用了组件      HelloComponent({ message: 'Hello, World!' });      Divider()      // 这里再次复用了组件      HelloComponent({ message: '你好!' });    }  }}

渲染效果如下:

图片

一个自定义的UI组件一般有几个关键组成部分:

  1. struct声明组件名字(如果需要复用,则需要加上export 关键字导出);

  2. @Component 关键字装饰第1步创建的组件,表示当前的结构体是一个自定义组件;

  3. build()函数,该函数用于描述本组件需要渲染的样式;

  4. @State 装饰的本地变量,用于存储当前组件的内部状态;

  5. @Entry 关键字装饰,表示当前组件是UI页面的入口;

2. build()函数

build()函数是所有UI组件开发都需要实现的方法,它主要负责对UI的描述定义,build()函数需要遵循一些规则,如下所述:

  • @Entry 装饰的组件,其build()函数下的根节点唯一且必要,且必须为容器组件。

    @Components装饰的自定义组件,其build()函数下的根节点唯一且必要,可为非容器组件。两者中的ForEach禁止作为根节点。

  • build()函数不允许声明本地变量,下面为反例:

build() {  // 反例:不允许声明本地变量  let a: number = 1;}

如果写了反例中的代码,编译期将报错,本地变量反例报错如下(后面的反例不再每个都贴图了):

图片

  • build()函数不允许在UI描述里直接使用console.info(),下面为反例:

build() {  // 反例:不允许console.info  console.info('print debug log');}
  • build()函数里不允许创建本地的作用域,下面为反例:

build() {  // 反例:不允许本地作用域  {    ...  }}
  • build函数里不允许调用没有用@Builder装饰的方法,允许系统组件的参数是TS方法的返回值。

@Componentstruct ParentComponent {  doSomeCalculations() {  }  calcTextValue(): string {    return 'Hello World';  }  @Builder doSomeRender() {    Text(`Hello World`)  }  build() {    Column() {      // 反例:不能调用没有用@Builder装饰的方法      this.doSomeCalculations();      // 正例:可以调用      this.doSomeRender();      // 正例:参数可以为调用TS方法的返回值      Text(this.calcTextValue())    }  }}
  • build()函数里不允许switch语法,如果需要使用条件判断,请使用if。

build() {  Column() {    // 反例:不允许使用switch语法    switch (expression) {      case 1:        Text('...')        break;      case 2:        Image('...')        break;      default:        Text('...')        break;    }  }}
  • build()函数里不允许使用表达式

build() {  Column() {    // 反例:不允许使用表达式    (this.aVar > 10) ? Text('...') : Image('...')  }}

3. 设置基本样式

所有的组件(不论是自定义组件还是系统组件),都可以设置一些通用样式,例如:宽度、高度、背景色、圆角等。设置方法均为 "." 号,示例代码如下:​​​​​​​

@Componentstruct MyComponent2 {  build() {    Button(`Hello World`)  }}@Entry@Componentstruct MyComponent {  build() {    Row() {      MyComponent2()        .width(200)        .height(300)        .backgroundColor(Color.Red)    }  }}

渲染效果如下:

tips:

ArkUI给自定义组件设置样式时,相当于给MyComponent2套了一个不可见的容器组件,而这些样式是设置在容器组件上的,而非直接设置给MyComponent2的Button组件。

通过渲染结果我们可以很清楚的看到,背景颜色红色并没有直接生效在Button上,而是生效在Button所处的开发者不可见的容器组件上。

接下来我们将进一步了解组件的声明周期,请关注 “鸿蒙UI开发快速入门 —— part02”

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!

长按下面的二维码关注公众号。

图片

标签:自定义,鸿蒙,part02,反例,UI,build,组件,函数
From: https://blog.csdn.net/harmonyClassRoom/article/details/139610612

相关文章

  • 大厂“争招”鸿蒙人才,鸿蒙程序员平均月薪超1万8
    鸿蒙程序员成新宠,大厂“抢人”大战白热化,月薪破万八只是开始?   在科技浪潮的推动下,鸿蒙系统异军突起,成为科技圈的新星。它如同一块肥沃的土地,孕育着无限商机,也滋养着程序员的梦想。如今,鸿蒙程序员已成为市场上的“香饽饽”,一场前所未有的“抢人”大战正在上演。而这一切,都......
  • Android14之向build.prop添加属性(二百一十九)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • 鸿蒙HarmonyOS实战-窗口管理
    ......
  • Vue3 运行可以,build 打包发布报错
    Vue多环境配置https://www.cnblogs.com/vipsoft/p/16696640.htmlconfig.jsconstconfig={title:'管理系统(开发)',//开发、测试apiUrl:'http://www.vipsoft.com.cn',version:'v1.0.1'}exportdefaultconfigmain.jsimportconfigfrom......
  • Python实现简单的图形化界面 -----Qt GUI
    一、Qt简介以及安装简单介绍Qt以及响应的环境安装Qt简介Qt是一个跨平台的C++开发库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序,当然也可以开发不带界面的命令行(CommandUserInterface,CUI)程序。支持通用操作系统Windows、Linux、Unix,智能手机系统Andro......
  • [ToneTuneToolkit][023]UGUI的去色,使UI元素变为灰色
    #regionEnvironmentWindows1022H2Unity2022.3.30f1LTSVSCode1.90.0//ToneTuneToolkit下载地址// https://github.com/MirzkisD1Ex0/ToneTuneToolkit.git#endregion 把UGUI的元素去色!变成灰色!!!超级方便!//该项功能已包含至ToneTuneToolkit插件  01.新建场景,新建......
  • 启动应用程序出现efsui.exe找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个efsui.exe文件(挑选合适的版本文件)把它放入......
  • 使用Druid替换springboot默认连接池HikariPool
    使用Druid替换springboot默认连接池HikariPool1.在pom文件中增加Druid依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.23</version></dependency>2.在a......
  • DoNet Core的启动过程-WebApplicationBuilder
     1.前言 在NET6开始做ASP.NETCore的开发,我们首先要看的是启动过程,而WebApplication和WebApplicationBuilder类是启动过程好不开的类,WebApplicationBuilder来引导启动,这和前面Core的版本引导启动分为Program和Startup是不同的,.NET6及以上版本直接使用Program中引导启动,而We......
  • vuInhub靶场实战系列--Kioptrix Level #3
    免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。目录免责声明前言一、环境配置1.1靶场信息1.2靶场配置二、信息收集2.1主机发现2.1.1netdiscover2.1.2arp-scan主机扫描2.2端口扫描2.3指纹识别2.......