鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化

简介: 鸿蒙开发语言ArkTS在继承了Typescrip语法的基础上,主要扩展了声明式UI开发相关的能力。

ArkTS声明式UI和组件化

大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!

ArkTS 在继承了Typescript语法的基础上,主要扩展了声明式UI开发相关的能力。

一、UI开发演变过程

1.1 HCJ原生时代

网页制作三件套HCJ制作UI界面是非声明式的,具体看一个开关等效果案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>开关灯</title>
    <style>
        .btn-light {
            background-color: #000;
            color: #FFF;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="light">
            <img id="light" src="./imgs/light-off.png" alt="">
        </div>
        <div>
            <button class="btn-light">开灯</button>
        </div>
    </div>

    <script>
        let img = document.querySelector("#light");
        let btn = document.querySelector(".btn-light");
        btn.addEventListener("click", function () {
            if (img.src.match("light-off")) {
                img.src = "./imgs/light-on.png";
                btn.innerHTML = "关灯"
                btn.className = ""
            } else {
                img.src = "./imgs/light-off.png";
                btn.innerHTML = "开灯"
                btn.className = "btn-light"
            }
        })
    </script>
</body>

</html>

​ 示例中通过为button案例绑定点击事件,并在事件处理函数中修改dom节点对应的属性值,从而实现状态变化,达到开关灯的效果。

1.2 基于MVVM的框架时代

​ 上述对Dom节点的操作不仅代码繁琐、频繁操作DOM节点还会引起性能问题。因此在前端技术发展过程中,诞生了很多MVVM思想的框架,比如React、Vue等。

​ MVVM核心思想就是对界面的操作不在通过JavaScript去操作DOM节点,而是通过将UI界面状态与对应的变量进行关联,通过修改变量从而实现UI界面的更新。

​ ArkTS的声明式UI采用了与之类似的方法,所以如果有Web基础知识,学习过Vue框架,几乎可以把对应的知识无缝平移到HarmonyOS应用的开发中。

​ 接下来介绍鸿蒙应用开发中的2个重要思想:声明式UI组件化

二、声明式UI

声明式UI是一种编写用户界面的范式。下面通过上边的开关灯案例来学习这种开发范式,将上例使用声明式的方法来实现。

2.1 声明式UI步骤

步骤1:定义界面状态

按照声明式UI的开发范式,首先需要分析和定义页面的各种状态,并声明相应的状态变量用于表示不同的状态。

当前案例中,界面共有两个状态,分别是开灯关灯状态,所以我们可以使用一个boolean类型的变量来表示这两个状态,true表示开灯false表示关灯。如下:

@State isOn: boolean = false;

说明:@State用于声明该变量为状态变量。

步骤2:描述界面显示效果

在分析完界面状态后,我们需要准确的描述界面在不同状态下的显示效果。

在当前案例中,具体逻辑如下图所示

1开关等伪代码.png

步骤3:改变状态

在明确了界面在不同状态下的显示效果后,我们只需修改状态变量的值,就能触发界面的更新。

在当前案例中,若我们将isOn的值改为true,那么界面上就会显示开灯的图片,否则就会显示关灯的图片。

为了实现点击按钮开/关灯的效果,我们可以为按钮绑定点击事件:

  • 当用户点击开灯按钮时,我们就将isOn的值改为true
  • 当用于点击关灯按钮时,我们就将isOn的值改为false

2改变状态.png

2.2 总结

以上就是声明式UI开发范式的大致流程,下面为大家总结一下声明式UI的核心思想

  • 声明式描述

开发者只需描述在界面在不同状态下要呈现的最终效果,而无需关注界面变化的具体过程。

  • 状态数据驱动界面更新

开发者只需修改状态变量的值,界面就会自动更新。

3界面状态双向绑定.png

三、组件化思想

​ 在鸿蒙开发中,组件是构成界面的最小单元,我们所看到的界面,都是由众多组件组合而成的,所以编写界面其实就是组合组件的过程,ArkTS提供了很多的内置组件,例如:TextButtonImage等等;并且ArkTS还支持自定义组件,让开发者可根据具体需求自定义组件中的内容。

4组件.png

​ 有了这些基础,接下来制作第一个入门案例:将以上的开关灯案例使用鸿蒙应用来实现。

四、组件化案例

效果:

5案例效果.png

1、素材准备

在pages目录下,新建目录imgs,将素材拷贝进来。

2、新建page文件

在pages目录右键,新建page,文件名称为:ControlLight

3、制作界面

按照定义页面状态、描述界面显示效果、改变状态的步骤进行界面制作,最终代码如下:

@Entry
@Component
struct ControlLight {
   
  @State isOpen: boolean = false

  build() {
   
      Column({
   space:50}) {
   
        if (this.isOpen) {
   
          Image('pages/imgs/light-on.png')
            .height(300)
            .width(300)
        }else {
   
          Image('pages/imgs/light-off.png')
            .height(300)
            .width(300)
        }
        Row({
   space:50}){
   
          Button('Close')
            .onClick(()=>{
   
              this.isOpen=false
            })
          Button('Open')
            .onClick(()=>{
   
              this.isOpen=true
            })
        }
      }
      .width('100%')
      .width('100%')
      .justifyContent(FlexAlign.Center)
  }
}

《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!

相关文章
|
2月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
261 12
|
2月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解滑块Slider和进度条Progress组件的使用。
154 1
|
2月前
|
数据安全/隐私保护 开发者
鸿蒙应用开发从入门到实战(十一):ArkUI组件Text&TextInput
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解文本组件Text和TextInput的使用。
262 3
|
2月前
鸿蒙应用开发从入门到实战(十六):线性布局案例
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文通过简单案例演示如何使用Column和Row组件实现线性布局。
139 1
|
2月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供滑块Slider与进度条Progress组件,用于鸿蒙原生APP开发。Slider支持拖动调节音量、亮度等,可设步长、方向及提示气泡;Progress支持线性、环形等多种样式,可自定义颜色、宽度与刻度,实时显示任务进度。
214 2
|
2月前
|
开发者
鸿蒙应用开发从入门到实战(十二):ArkUI组件Button&Toggle
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解按钮组件Button和Toggle的使用。
274 2
|
2月前
|
存储 编解码 JSON
鸿蒙应用开发从入门到实战(十):ArkUI图片组件Image
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Image图片组件的使用。
227 1
|
6月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
215 15
|
6月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
245 11
|
2月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
267 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例

热门文章

最新文章