大家好,我是潘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:描述界面显示效果

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

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

步骤3:改变状态

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

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

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

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

2.2 总结

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

  • 声明式描述

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

  • 状态数据驱动界面更新

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

三、组件化思想

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

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

四、组件化案例

效果:

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+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!

鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化的更多相关文章

  1. 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf

    <ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...

  2. Python项目案例开发从入门到实战 - 书籍信息

    Python项目案例开发从入门到实战 - 爬虫.游戏和机器学习(微课版) 作者:郑秋生 夏敏捷 清华大学出版社 ISBN:978-7-302-45970-5

  3. 乘风破浪,遇见Android Jetpack之Compose声明式UI开发工具包,逐渐大一统的原生UI绘制体系

    什么是Android Jetpack https://developer.android.com/jetpack Android Jetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法.减少 ...

  4. 第六章 声明式服务调用: Spring Cloud Feign

    我们在使用 Spring Cloud Ribbon 时, 通常都会利用它对 RestTemplate 的请求拦截来实现对依赖服务的接口调用, 而 RestTemplate 已经实现了对 HTTP 请求 ...

  5. asp.net core跨平台开发从入门到实战文摘

    第1章 .NET Core 第2章 dotnet命令 第3章 VS Code安装及介绍 第4章 VS2015开发.NET Core 第5章 ASP.NET Core 第6章 EF Core 第7章 A ...

  6. Python项目案例开发从入门到实战-1.4Python图形界面设计

    Python提供了多个图形开发界面的库,常用的Python GUI库如下. -Tkinter:Python内置模块 -wxPython -Jython 1.4.1创建Windows窗口 import ...

  7. Python项目案例开发从入门到实战-1.5Python文件的使用

    Python对文件的操作通常按照三个步骤进行: un 使用open()函数打开(或建立)文件,并返回一个file对象. deux 使用file对象的读写方法对文件进行读写操作. trois 使用fil ...

  8. Python项目案例开发从入门到实战-1.3 Python面向对象设计

    1.3.1定义于使用类 类的定义 class class_name: attribute function 例: class Person: age=18 def say(): print(" ...

  9. Python项目案例开发从入门到实战-1.2 Python语法基础

    书籍信息 1.2 Python语法基础 1.2.1 Python数据类型 数值类型 整型(int):浮点型(float):复数(complex),以j或J结尾,如2+3j 字符串 布尔类型 空值,用N ...

  10. 如何快速体验鸿蒙全新声明式UI框架ArkUI?

    HDC2021将于10月22日在东莞松山湖正式开幕,大会将设立Codelab体验专区,超多好玩.有趣的Demo等你体验.想快速入门HarmonyOS?学习HarmonyOS新特性?以下几个Codela ...

随机推荐

  1. Xamarin.Android给 EditText 添加焦点的扩展方法

    /// <summary> /// 定义了一个扩展方法 SetFocus,作用是设置 EditText 控件的焦点,并可以选择全部选中或者仅选中最后一个字符 /// 给 EditText ...

  2. mysql增加唯一索引

    索引分为主键索引 外键 唯一索引等

  3. aegis-dev-tools的使用

    前言aegis-dev-tools是一个辅助开发前端的工具包,用于根据后端接口文档生成前端封装api请求. 创建后端项目要求使用swagger,且controler书写规范,输入输出类型,备注都要 合 ...

  4. 前端开发系列017-基础篇之Javascript原型对象

    引用: javaScript是一门基于原型的语言,它允许对象通过原型链引用另一个对象来构建对象中的复杂性,JavaScript使用原型链这种机制来实现动态代理.当试图去引用某一个属性时,它会遍历整个原 ...

  5. Java 中的 ==

    简介 如果没有重写 equals 方法, 相当于 == 比较, 即比较两个对象的地址是否相等. 如果是基本数据类型, 直接对值进行比较. code /** * Created by lee on 20 ...

  6. 管理心理学 Management Psychology

    管理心理学 Management Psychology 作者: 浏览量:4046 [课程编号][所属模块]专业方向课 [学分数]3学分 [适用专业]心理学 [学时数]52学时 [开设学期]秋季 [已开 ...

  7. Unity直接读取Excel之Unity quick sheet

    方便  强大  易用! 文档:http://kimsama.github.io/Unity-QuickSheet/ 源码:https://github.com/kimsama/Unity-QuickS ...

  8. 收藏!国内120+AI Agent开发/构建平台大盘点(上):互联网、云计算、AI、传统软件厂商推出的智能体平台

    一口气盘点国内120+AI Agent平台(上):大厂.云服务商.AI 企业全收录,了解智能体平台看这篇就够了 国内120+智能体开发平台大盘点(上):互联网巨头.云服务商.传统软件商的 AI布局全曝 ...

  9. Angualr响应式表单

    由于最近公司框架升级,抛弃了原来手动检验表单的方式,将所有的表单改为响应式,由于之前没用过,在一开始我以为只有我没有用过,了解了小组里的其他同事得知基本都不是很熟悉 后面时间比较紧,没办法只能边做边学 ...

  10. [J组模拟赛 #002 T4]分组选数

    分组选数 题目大意: 给 \(n\) 个数,第 \(i\) 个数是 \(a_i\),属于第 \(b_i\) 个集合中.对于每个集合,若从中选出若干个数,则价值为这些数的异或和,总共的价值就是所有集合的 ...