鸿蒙HarmonyOS开发中的易混点归纳-持续补充中

相关文章目录

鸿蒙HarmonyOS开发术语全解:小白也能看懂!


文章目录

  • 相关文章目录
  • 前言
  • 一、build()函数和@Builder装饰器?
  • 二、自定义组件和系统组件(内置组件)
  • 三、组件和页面
  • 四、自定义弹窗和其他弹窗
  • 总结


前言


一、build()函数和@Builder装饰器?

  • build()函数:build()函数用于定义自定义组件的声明式UI描述,自定义组件必须定义build()函数。

  • @Builder:更轻量的UI元素复用机制,@Builder所装饰的函数遵循build()函数语法规则,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。为了简化语言,我们将@Builder装饰的函数也称为“自定义构建函数”。

二、自定义组件和系统组件(内置组件)

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

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

  • 可组合:开发者可以灵活地将系统组件、它们的属性以及方法组合使用,创建出丰富多样的UI界面。
  • 可重用:自定义组件具有很高的复用性,可以被其他组件重复利用,并作为不同的实例在不同的父组件或容器中使用,从而提高开发效率。
  • 数据驱动UI更新:自定义组件支持通过状态变量的改变来驱动UI的刷新,实现动态的数据展示和交互效果。

三、组件和页面

明确自定义组件和页面的关系:

自定义组件:使用@Component装饰的UI单元,通过组合多个系统组件实现UI的复用,并且可以调用组件的生命周期方法。

页面:即应用的UI页面,由一个或多个自定义组件组成。使用@Entry装饰的自定义组件作为页面的入口组件,即页面的根节点。每个页面只能有一个@Entry装饰的组件。只有被@Entry装饰的组件才能调用页面的生命周期方法。

页面生命周期(即被@Entry装饰的组件生命周期)提供以下生命周期接口:

  • onPageShow:页面每次显示时触发,包括路由过程、应用进入前台等场景。
  • onPageHide:页面每次隐藏时触发,包括路由过程、应用进入后台等场景。
  • onBackPress:用户点击返回按钮时触发。

组件生命周期(即使用@Component装饰的自定义组件的生命周期)提供以下生命周期接口:

  • aboutToAppear:组件即将出现时回调,发生在创建自定义组件的新实例后,执行其build()函数之前。
  • aboutToDisappear:组件析构销毁之前执行。不允许在此函数中改变状态变量,特别是@Link变量的修改,可能会导致应用程序行为不稳定。

生命周期流程(仅展示被@Entry装饰的组件/页面生命周期)大致如下:

(注:由于文本描述中未提供具体的流程图,此处无法展示流程图。请根据实际流程图进行解释。)

根据生命周期流程,我们可以从自定义组件的初始创建、重新渲染和删除来详细解释:

自定义组件的创建和渲染流程:

  1. 自定义组件的实例由ArkUI框架创建。
  2. 通过本地默认值或构造方法传递参数来初始化自定义组件的成员变量,初始化顺序为成员变量的定义顺序。
  3. 如果开发者定义了aboutToAppear方法,则在组件即将出现时执行该方法。
  4. 在首次渲染时,执行build方法渲染系统组件。如果子组件为自定义组件,则创建子自定义组件的实例。首次渲染过程中,框架会记录状态变量和组件的映射关系,以便在状态变量改变时驱动相关组件刷新。
  5. 当应用在后台启动时,由于应用进程并未销毁,因此仅需要执行页面的onPageShow生命周期方法。

四、自定义弹窗和其他弹窗

  • 自定义弹窗(CustomDialog)
    用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。
  • 日期滑动选择器(DatePicker)
    根据指定范围的Date创建可以选择日期的滑动选择器。
  • 时间滑动选择器弹窗(TimePicker)
    时间选择组件,根据指定参数创建选择器,支持选择小时及分钟。
  • 文本滑动选择器弹窗(TextPickerDialog)
    根据指定的选择范围创建文本选择器,展示在弹窗上
  • 列表选择弹窗(ActionSheet)
  • 警告弹窗(AlertDialog)
    在这里插入图片描述

总结

持续更新中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

骨传导耳机哪个牌子好?五大热门精选推荐,真心力荐!

作为一名运动达人,在日常运动中经常会使用一些运动耳机,由于运动场景的特殊性,所以骨传导耳机凭借特殊的佩戴方式和独特的传声原理,所以骨传导耳机就成运动中的得力助手。然而,近期许多消费者在购买时往往被网络上的流…

冯喜运:5.24现货黄金趋势解读,黄金原油行情分析及操作建议

【黄金消息面分析】:美国劳工部公布的最新数据显示,截至5月18日的一周内,首次申请失业救济人数下降至21.5万人,创下自去年9月以来的最大降幅。数据公布后,现货黄金短线下挫6美元,报2362.71美元/盎司。这表明…

STM32入门笔记(02):USART串口通信注意事项笔记(SPL库函数版)

这是通过串口通信发送过来的数据,里面包括了故障码,电压,电流,频率等信息,请你用STM32f103系列单片机的串口1读取该数据并解析出电压和电流是多少? 要用STM32F103系列单片机的串口1读取并解析发电机上的逆…

一顿五元钱的午餐

在郑州喧嚣的城市一隅,藏着一段鲜为人知的真实的故事。 故事的主角是一位年过半百的父亲,一位平凡而又伟大的劳动者。岁月在他脸上刻下了深深的痕迹,但他眼神中闪烁着不屈与坚韧。 他今年52岁,为了给远在家乡的孩子们一个更好的…

MySQL 将json转为行,JSON_TABLE函数详解

MySQL 将json转为行,JSON_TABLE函数详解 JSON_TABLE 是 MySQL 8.0 引入的一个强大函数,它用于将 JSON 数据转换为关系表的格式。通过 JSON_TABLE 函数,可以将 JSON 文档解析为关系表的列和行,使得在 SQL 查询中处理 JSON 数据更加…

RocketMQ之DefaultPushConsumer

DefaultMQPushConsumer消息链路 DefaultMQpushConsumer#start方法调用DefaultMQpushConsumerImpl#start方法,接着内部调用MQClientInstance#start方法,接着调用RebalanceService#start方法。 RebalanceService#start方法开启一个线程,执行本类中的runnable#run方法。run方法…

P6【知识点】【数据结构】【树tree】C++版

树是由一个集合以及在该集合上定义的一种关系构成的,集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构,在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点。 二叉…

数据库|基于T-SQL创建数据库

哈喽,你好啊,我是雷工! SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL。 本节学习基于T-SQL创建数据库。以下为学习笔记。 01 打开新建查询 首先连接上数据库,点击【新建查询】打开新建查询窗口, …

如何在go项目中实现发送邮箱验证码、邮箱+验证码登录

前期准备 GoLand :2024.1.1 下载官网:https://www.jetbrains.com/zh-cn/go/download/other.html Postman: 下载官网:https://www.postman.com/downloads/ 效果图(使用Postman) Google: QQ: And …

java 8--Lambda表达式,Stream流

目录 Lambda表达式 Lambda表达式的由来 Lambda表达式简介 Lambda表达式的结构 Stream流 什么是Stream流? 什么是流呢? Stream流操作 中间操作 终端操作 Lambda表达式 Lambda表达式的由来 Java是面向对象语言,除了部分简单数据类型…

SpringBoot——整合MyBatis

目录 MyBatis 项目总结 1、创建SQL表 2、新建一个SpringBoot项目 3、pom.xml添加依赖 4、application.properties配置文件 5、User实体类 6、UserMapper接口 7、UserMapper.xml映射文件 8、UserController控制器 9、SpringBootMyBatisApplication启动类 10、使用Po…

关于如何创建一个可配置的 SpringBoot Web 项目的全局异常处理

前情概要 这个问题其实困扰了我一周时间,一周都在 Google 上旅游,我要如何动态的设置 RestControllerAdvice 里面的 basePackages 以及 baseClasses 的值呢?经过一周的时间寻求无果之后打算决定放弃的我终于找到了一些关键的线索。 当然在此…

反射的基本知识

基本概念 反射是java在运行过程中的自我观察能力,通过class constructor field method 四个方法来获取一个类的各个组成部分。 反射是在运行状态中对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象都能调用它的任意一个方法…

《MySQL是怎样运行的》快速查询秘籍——B+树索引

一.引出索引 前面一章我们说出了数据页的结构,但是如果我们要查找某一条记录的话,怎么办呢? 我们前面知道页与页之间是一个双向链表实现的,我们要找的话,是不是要按照这个链表一个一个找下去,然后找到&am…

数据链路层简单介绍

mac地址(物理地址) mac地址和ip地址,目的都是为了区分网络上的不同设备的,在最开始的时候,mac地址和ip地址是两伙人,独立各自提出的,ip地址是4个字节(早都不够用了)&…

【个人商业画布】你有思考过把自己当成一家公司来经营吗?

商业模式画布(Business Model Canvas),是亚历山大奥斯特瓦德在《商业模式新生代》中提出的一种用于描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。它由9个模块构成,帮助创业者理清为“细分客户提供独有价值”,从而…

PersonalLLM——探索LLM是否能根据五大人格特质重新塑造一个新的角色?

1.概述 近年来,大型语言模型(LLMs),例如ChatGPT,致力于构建能够辅助人类的个性化人工智能代理,这些代理以进行类似人类的对话为重点。在学术领域,尤其是社会科学中,一些研究报告已经…

溪谷联运SDK功能全面解析

近期,备受用户关注的手游联运10.0.0版本上线了,不少用户也选择了版本更新,其中也再次迎来了SDK的更新。溪谷软件和大家一起盘点一下溪谷SDK的功能都有哪些吧。 一、溪谷SDK具有完整的运营功能和高度扩展性 1.登录:登录是SDK最基础…

简述MyBatis中#{}引用和${}引用的区别

各位大佬光临寒舍,希望各位能赏脸给个三连,谢谢各位大佬了!!! 目录 1.有无预编译 优点 缺点 2.SQL执行的快慢 3.能否被SQL注入 4.参数输入方式 5.总结 1.有无预编译 #{}是有预编译的而${}是没有预编译的&…

OceanBase集群如何进行OCP的替换

有OceanBase社区版的用户提出替换 OCP 管控平台的需求。举例来说,之前的OCP平台采用单节点,然而随着OceanBase集群的陆续上线和数量的不断增多,担心单节点的OCP可能面临故障风险,而丧失对OceanBase集群的管控能力。另此外&#xf…