文章目录

  • 前言
  • 一、ArkUI是何方神圣?
  • 二、声明式UI
  • 三、组件
    • 1.基础组件
    • 2.布局容器组件
    • 3.导航组件
    • 4.自定义组件
    • 5.组件生命周期
  • 四、状态管理
    • 1.@State装饰器: 状态变量
    • 2.@Prop装饰器:父子单向同步
    • 3.@Link装饰器:父子双向同步
    • 4.@Provide/@Consume装饰器:跨层级传递
    • 5.@Observed/@ObjectLink装饰器:嵌套类对象属性变化
  • 五、路由/导航
    • 1.组件导航
    • 2.Router页面路由
  • 参考


前言

我们前面进行了了解元服务、IDE、ArkTS,目前前期准备工作已经差不了。我们可以进行学习UI阶段了。距离实现元服务上架,又是一个里程碑式的进展。奥利给~


一、ArkUI是何方神圣?

ArkUI即方舟UI框架,提供了一套完整的基础设施,包括简洁的UI语法、丰富的UI功能(丰富的组件、布局、动画以及交互事件),以及实时界面预览工具(双向预览),支持开发者进行丰富页面的开发。

在这里插入图片描述
ArkUI基于关键的应用UI开发底座,深度融合语言/编辑器/图形。
在这里插入图片描述

二、声明式UI

通过声明UI结构和状态,自动驱动界面渲染。开发者只需描述“界面应该是什么样”,无需手动管理UI更新。适用于复杂度较高、团队协作的应用开发,具有高开发效率、良好性能和易维护等优势。

  • 通过数据驱动UI发生变化,UI与业务逻辑分离,更直观、更高效。
    在这里插入图片描述

三、组件

组件是构成UI界面的最小单位,如列表、网格、按钮、单选框、按钮、文本等。
组件有无参数组件和有参数组件,有特有的属性和事件以及子组件。

  • 组件类型:分为无参数组件和有参数组件。
      /// 有参数组件Text('Hello!')/// 无参数组件Blank()
  • 属性,例如Text的fontColor属性
     Text(this.message).fontColor(Color.Orange)
  • 事件
   Button('Click').onClick(() => {console.log('点击了我');})
  • 子组件
    Column() {Text(this.message)Blank()}

1.基础组件

基础组件用于展示页面的基础元素,有文本Text、按钮Button、图片Image。
在这里插入图片描述

2.布局容器组件

布局容器组件用于组织组件的排列,有行Row、列Column、列表List、网格列表Grid、轮播图swiper。
在这里插入图片描述
在这里插入图片描述

3.导航组件

导航组件实现页面的跳转和切换,有Navigation、Tabs。
在这里插入图片描述

4.自定义组件

通过多种组件的组合,封装为可复用的UI单元。自定义组件基于struct实现,struct + 自定义组件名 + {…}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。

@Entry
@Component
struct CustomCompent {build() {Column() {Text('Hello,ArkUI!')Blank().height(100)Text('Hello wold!')}.justifyContent(FlexAlign.Center).width('100%')}
}

5.组件生命周期

  • 组件即将出现:aboutToAppear(),在创建自定义组件的新实例后调用。
    可以对状态变量进行修改,修改后再build函数中生效。
  • 组件构建:buld()
  • 组件构建完成:onDidBuild()
  • 页面即将出现:onPageShow()
    页面每次显示时,都会回调这个函数,比如跳转到这个页面,从后台进入前台返回这个页面。仅在@Entry修饰的组件中适用。
  • 点击按钮或者侧滑返回时:onBackPress()。仅在@Entry修饰的组件中适用。
  • 页面即将隐藏进入后台时:onPageHide()。仅在@Entry修饰的组件中适用。
  • 组件销毁之前调用:aboutToDisappear()。

在这里插入图片描述


四、状态管理

状态变更引起了UI渲染。在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时状态作为参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化导致的UI重新渲染,在ArkUI中统称为状态管理机制。

在这里插入图片描述

ArkUI有多维度的状态管理机制,在UI开发框架中与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如组件内(@State)、父子组件之间(@Prop/@Link)、爷孙组件之间(@Provide/@Consume)、应用全局范围内专递或跨设备传递。

从数据的传递形式看,可分为只读的单向传递(@Prop)和可变更的双向传递(@Link)。

1.@State装饰器: 状态变量

@State装饰的变量称为状态变量,使普通变量具备状态属性。当状态变量改变时,会触发其直接绑定的UI组件渲染更新。

2.@Prop装饰器:父子单向同步

对父组件状态变量值的修改,将同步给子组件@Prop装饰的变量,子组件@Prop装饰的变量的修改不会同步到父组件的状态变量上。

3.@Link装饰器:父子双向同步

双向同步。父组件状态变量与子组件@Link建立双向同步,当其中一方改变时,另一方也会同步更新。

4.@Provide/@Consume装饰器:跨层级传递

@Provide和@Consume,应用于与后代组件的双向数据同步、状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。

5.@Observed/@ObjectLink装饰器:嵌套类对象属性变化

@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步。


五、路由/导航

组件导航(Navigation)和页面路由(@ohos.router)均提供了应用内的页面跳转能力。
在这里插入图片描述

1.组件导航

在组件导航(Navigation)框架下,“页面”通过NavDestination组件承载,特指一个NavDestination组件包含的内容。
Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。一次开发,多端部署场景下,Navigation组件能够自动适配窗口显示大小,在窗口较大的场景下自动切换分栏展示效果。

Navigation组件主要包含​导航页和子页。导航页由标题栏(包含菜单栏)、内容区和工具栏组成,可以通过hideNavBar属性进行隐藏,导航页不存在路由栈中,与子页,以及子页之间可以通过路由操作进行切换。

在这里插入图片描述


// push page
this.pathStack.pushPath({ name: 'pageOne' });// pop page
this.pathStack.pop();
this.pathStack.popToIndex(1);
this.pathStack.popToName('pageOne');// replace page
this.pathStack.replacePath({ name: 'pageOne' });// clear all page
this.pathStack.clear();

2.Router页面路由

Router路由的页面是一个@Entry修饰的Component,每一个页面都需要在main_page.json中声明。
页面路由指在应用程序中实现不同页面之间的跳转和数据传递。Router模块通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。

// push page
router.pushUrl({ url:"pages/pageOne", params: null });// pop page
this.getUIContext().getRouter().back({ url: "pages/pageOne" });// replace page
router.replaceUrl({ url: "pages/pageOne" });

参考

  • 文档——学习ArkUI
  • 视频——ArkUI框架介绍-哔哩哔哩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93205.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93205.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93205.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剧本杀小程序系统开发:构建剧本杀社交新生态

在社交需求日益多样化的今天,剧本杀凭借其独特的社交属性,成为了人们热衷的社交娱乐方式之一。而剧本杀小程序系统开发,则进一步拓展了剧本杀的社交边界,构建起一个全新的剧本杀社交新生态,让玩家在推理与角色扮演中&a…

AI提高投放效率的核心策略

内容概要人工智能技术正深刻改变着广告投放领域,其核心价值在于显著提升投放效率。通过融合智能算法优化、实时数据分析与自动化投放流程,AI系统能够以前所未有的速度和精度处理海量信息,驱动更精准的营销决策。这不仅大幅缩短了传统人工操作…

OpenBMC 中命令模式的深度解析:从原理到实现

引言 在 OpenBMC 的设计中,命令模式(Command Pattern)被广泛应用于各种场景,特别是 IPMI 命令处理、异步操作封装和用户请求管理等。本文将深入分析 OpenBMC 中命令模式的实现原理、架构设计以及完整的执行流程,并通过…

从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.15

第十七天 第五十七,五十八,五十九和六十集 第五十六集 删除链表结点 没什么好说的关键部分代码如图 链表的插入操作 依旧没有啥可以说的代码部分大家看视频就能看懂,大家应该是没有什么问题的吧? 第五十七集 共用体形式结构与结构…

云服务器网站无法访问的系统化故障排查指南及多维度解决方案

当云服务器上的网站突然无法访问时,这种突发状况往往让人措手不及。别担心,我们可以通过系统化的排查流程快速定位问题根源。以下是经过实战验证的故障排除指南,帮您分步解决网站访问异常问题。一、基础状态确认 服务器的生命体征就像人体的脉…

strings命令和findstr命令验证iso文件中ntkrnlmp.exe系统版本

strings命令和findstr命令验证iso文件中ntkrnlmp.exe系统版本D:\chsads3647\i386>expand.exe Microsoft (R) File Expansion Utility Version 5.2.3647.0 版本所有 (c) Microsoft Corporation. 保留所有权利。未指定文件。D:\chsads3647\i386>strings.exe ntkrnlmp.exe …

C语言:指针(5)

1. sizeof与strlen的对比1.1 sizeofsizeof属于是操作符,用于计算变量所占的空间大小,单位为字节。如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。sizeof只计算数据在内存中所占的空间大小,而不在乎内存中存…

rent8 安装部署教程之 Windows

1. Apache 安装与配置 1.1. 获取并解压 Apache 在 Apache Lounge 网址下载编译版的 Apache。下载完成后,将压缩包解压到 d:\web\Apache24 作为 Apache 的安装目录。 1.2. 配置 Apache 打开配置文件 conf\httpd.conf,找到第 37 行配置。 ​ Define SRVROO…

边缘智能实战手册:攻克IoT应用三大挑战的AI战术

前言:在当前的AIoT(人工智能物联网)赛道上,将AI能力下沉至边缘设备已不再是“要不要做”的选择题,而是“如何做好”的必答题。然而,在实际项目中,工程师们常常会遇到性能、功耗和隐私这“三座大…

【React】use-immer vs 原生 Hook:谁更胜一筹?

1.概述 use-immer 不属于官方 Hook,是社区维护的第三方库!use-immer 通过封装 Immer 的不可变更新机制,为 React 开发者提供了一种更直观、高效的状态管理方式。它尤其适合处理复杂嵌套状态或需要频繁更新的场景,同时保持了与 Re…

【案例】Vue3 实现高性能级横向循环滚动生产线效果:基于 requestAnimationFrame 的流畅动画方案

动画效果在工业监控系统、生产看板等场景中,经常需要模拟生产线的动态运行效果。本文将基于 Vue3 和 requestAnimationFrame 实现一个高性能的横向循环滚动效果,完美模拟生产线传输带的视觉体验。我们将从代码实现到原理分析,全面讲解如何打造…

万字长文解码如何玩转Prompt(附实践应用)

在AI技术迅猛发展的今天,如何与大型语言模型高效“对话”已成为释放其潜力的关键。本文深入探讨了提示词工程(Prompt Engineering)这一新兴领域,系统解析了从基础概念到高级技巧的完整知识体系,并结合“淘宝XX业务数科…

easyExcel嵌套子集合导出Excel

我想要的Excel效果说明: 1.创建两个自定义注解:ExcelMerge(表示主对象内的单个属性,后续会根据子集合的大小合并下面的单元格),ExcelNestedList(表示嵌套的子集合) 2.NestedDataConverter.java 会把查询到的数据转换为一行一行的,相当于主表 left join 子表 ON 主.id子.主id的形…

基于 C# WinForm 字体编辑器开发记录:从基础到进阶

目录 基础版本实现 进阶版本改进 字体设置窗体增强 主窗体改进 功能对比 项目在本文章的绑定资源中免费的,0积分就可以下载哦~ 在 Windows Forms 应用开发中,字体编辑功能是许多文本处理软件的基础功能。本文将分享一个简易字体编辑器的开发过程&a…

Linux基本使用和Java程序部署(含 JDK 与 MySQL)

文章目录Linux 背景知识Linux 基本使用Linux 常用的特殊符号和操作符Linux 常用命令文本处理与分析系统管理与操作用户与权限管理文件/目录操作与内容处理工具Linux系统防火墙Shell 脚本与实践搭建 Java 部署环境apt(Debian/Ubuntu 系的包管理利器)介绍安…

抗辐照CANFD通信芯片在高安全领域国产化替代的研究

摘要:随着现代科技的飞速发展,高安全领域如航空航天、卫星通信等对电子设备的可靠性与抗辐照性能提出了极高的要求。CANFD通信芯片作为数据传输的关键组件,其性能优劣直接关系到整个系统的稳定性与安全性。本文聚焦于抗辐照CANFD通信芯片在高…

Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码

作者源码阅读笔记主要采用金山云文档记录的,所有的交互图和代码阅读笔记都是记录在云文档里面,本平台的文档编辑实在不方便,会导致我梳理的交互图和文档失去原来的格式,所以整理在文档里面,供大家阅读交流. 【金山文档…

Java集合类综合练习题

代码 import java.util.*; class ScoreRecord {private String studentId;private String name;private String subject;private int score;public ScoreRecord(String studentId, String name, String subject, int score) {this.studentId studentId;this.name name;this.s…

秒懂边缘云|1分钟了解边缘安全加速 ESA

普通开发者如何搭建安全快速的在线业务才能性价比最高 ?阿里云现已为开发者推出免费版边缘安全加速 ESA,1 个产品就能把 CDN 缓存 API 加速 DNS WAF DDoS 防护全部搞定,还支持边缘函数快速部署网站和 AI 应用,性价比拉满。 1…

数据结构:串、数组与广义表

📌目录🔤 一,串的定义🌰 二,案例引入场景1:文本编辑器中的查找替换场景2:用户手机号验证📚 三,串的类型定义、存储结构及其运算(一)串的抽象类型定…