HarmonyOS Next应用开发——自定义组件的使用

news2024/12/22 10:02:33

自定义组件的使用

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

创建自定义组件

自定义组件的基本结构
@Component
export struct hellocomponent{
  // 状态变量
  @State message:string ='hello component'
  // 私有变量
  private content
  // 构建函数 写法跟build类似
  @Builder
  genxx(aa){
   
  }
  // 构建UI界面 一个文本显示框
  build(){
     Text(this.message)
       .border({color:Color.Red,width:1,radius:5})
       .fontSize(22)
       .fontWeight(FontWeight.Bolder)
       .width('100%')
       .padding(5)
       .onClick(()=>{
         this.message=this.content
       })
  }
}

@Component是组件的注解,声明一个组件;

export对外共享该组件,struct生命组件名称;

可以有成员变量、@builder注解的函数和build函数构成。

使用自定义组件

UI入口组件

@Entry装饰的自定义组件将作为UI页面的入口。在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。

// 引入其他自定义组件
import { hellocomponent } from '../components/hellocomponents'
@Entry
@Component
struct Index {
  // 状态变量
  @State message: string = 'Hello World'
  // 成员变量
  private flag:boolean
  // 构建函数 写法同build函数
  @Builder
  genxx(){
    
  }
  // 构建ui函数
  build() {
    Row() {
      Column() {
       //  自定义组件的使用
       hellocomponent({content:'hello arkui'})
      }
      .width('100%')
    }
    .height('100%')
  }
}
  • 入口组件与自定义组件唯一的区别就是build函数。

自定义组件的build函数要求有唯一的容器,如上row作为唯一容器,自定义组件并没有该要求。

  • 入口组件使用自定义组件的时候可以直接调用,并且初始化其中的成员变量。

  • build函数中不能使用一些语法:

    • 不能声明变量
    • 不能日志打印
    • 不能调用非@builder修饰的函数

自定义组件生命周期

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

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。

onBackPress:当用户点击返回按钮时触发。

  • 组件生命周期,即一般用@Component装饰的自定义组件的生命周期,页面也可以定义这些生命周期函数,提供以下生命周期接口:

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

在这里插入图片描述

自定义组件完整写法
/**
 *作者:gxx
 *日期:2024-03-13 17:25:59
 *介绍:
 *自定义组件
 **/

@Component
export struct hellocomponent{
  // 状态变量
  @State message:string ='hello component'
  // 私有变量
  private content
  // 构建函数 写法跟build类似
  @Builder
  genxx(aa){

  }
  // 样式函数 全局样式
  @Styles
  genstyle(aa){

  }
  // 构建UI界面
  build(){
     Text(this.message)
       .border({color:Color.Red,width:1,radius:5})
       .fontSize(22)
       .fontWeight(FontWeight.Bolder)
       .width('100%')
       .padding(5)
       .onClick(()=>{
         this.message=this.content
       })
  }
  aboutToAppear(){
    console.info("gxx 自定义组件准备显示")
  }
  aboutToDisappear(){
    console.info("gxx 自定义组件准备消失")
  }
}

入口界面完整写法
// 引入其他自定义组件
import { hellocomponent } from '../components/hellocomponents'
@Entry
@Component
struct Index {
  // 状态变量
  @State message: string = 'Hello World'
  // 成员变量
  private flag:boolean
  // 构建函数 写法同build函数
  @Builder
  genxx(){

  }
  // 构建ui函数
  build() {
    Row() {
      Column() {
       //  自定义组件的使用
       hellocomponent({content:'hello arkui'})
      }
      .width('100%')
    }
    .height('100%')
  }

aboutToAppear(){
  console.info("gxx页面准备显示")
}
aboutToDisappear(){
  console.info("gxx页面准备消失")
}
onPageShow(){
  console.info("gxx页面显示")
}
onPageHide(){
  console.info("gxx页面消失")
}
onBackPress(){
  console.info("gxx页面被点击了后退")
}

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库开启归档模式

目录 一、什么是归档模式? 二、开启归档模式的步骤 1、创建归档目录 2、进入dm数据库bin目录 3、登录数据库 4、关闭数据库 5、启动数据库到Mount状态 6、增加本地归档日志文件 7、开启归档 8、启动数据库 9、验证是否开启成功 三、开启归档模式的优…

Lj视频下载器 1.1.37 简洁高效的视频下载工具

Lj视频下载器是一个功能强大的视频下载器,支持直接添加视频地址或 m3u8 资源地址,可以从网页中自动提取视频进行下载。支持多种视频格式,包括 m3u8,并能自动检测并移除广告片段。 大小:19M 百度网盘:https…

Linux CentsOS定时删除一个目录下(包含子目录)的改动时间大于12小时的文件

Shell脚本 文件目录如下图 ** 查找/ai/img/目录下的所有文件** find /ai/img/ -type f查找/ai/img/目录下的所有上次改动时间大于720分钟(12小时)的文件 12 小时,也就是 720 分钟。所以,我们可以使用 -mmin 720 来查找修改时间超过 720 分钟(…

uniapp 微信小程序 微信支付

本章的内容我尽量描述的细致一些,哪里看不懂给我评论就可以,我看到进行回复 微信支付大致分为4步,具体看后端设计 1. 获取code 2. 根据code获取openid 3. 根据openid,以及部分订单相关数据,生成prepayId (预支付交易会…

免费 Oracle 各版本 离线帮助使用和介绍

文章目录 Oracle 各版本 离线帮助使用和介绍概要在线帮助下载离线文档包:解压离线文档:访问离线文档:导航使用:目录介绍Install and Upgrade(安装和升级):Administration(管理&#…

交通场景多目标检测系统源码分享

交通场景多目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Qt界面优化——绘图API

文章目录 绘图核心API绘制各种形状绘制线段绘制矩形绘制圆形绘制文本设置画笔设置画刷 绘制图片 绘图核心API Qt的各种控件,本质上都是画出来的,这不过这些都是提前画好了,我们拿过来直接使用即可。 实际开发中,可能现有控件无法…

面了智谱大模型算法岗,效率贼高!

最近这一两周不少互联网公司都已经开始秋招提前批面试了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…

使用容器启动的zk无法暴露3888问题解决

1. 问题描述 zk配置如下: 我通过容器启动了一个zk,通过-p 参数暴露了2181和3888端口,容器启动脚本如下: #!/bin/shdocker rm -f myzookeeper1docker run -p 12181:2181 -p 13888:3888 --name myzookeeper1 --restart always …

C# 字符串(String)的应用说明一

一.字符串(String)的应用说明: 在 C# 中,更常见的做法是使用 string 关键字来声明一个字符串变量,也可以使用字符数组来表示字符串。string 关键字是 System.String 类的别名。 二.创建 String 对象的方法说明&#x…

c++ 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)

先决条件: 如何检查两个给定的线段是否相交? c https://blog.csdn.net/hefeng_aspnet/article/details/141713655 java https://blog.csdn.net/hefeng_aspnet/article/details/141713762 python https://blog.csdn.net/hefeng_aspnet/article/details/…

Australis 相機率定軟體說明

概要 課堂中使用Australis這套軟體,順帶記錄操作過程 內容以老師口述及我測試的經過 照片為老師課堂提供之 說明 執行 Step1. 匯入照片 注意!!如果是Mac的作業系統,將資料夾移到Windows上的時候,建議創一個新的資料…

mysql---索引类型及索引方法使用

mysql索引类型 Normal、Full Text、Unique 在 MySQL 中,索引的类型主要有以下几种: Normal Index(普通索引): 这是最基本的索引类型,没有唯一性要求。允许重复值,可以加速查询性能。用法&#…

产品经理的学习

初学 接需求 画原型 写文档 日常产出 流程图 举例购物的流程 结构图 一个应用的全部功能,用思维导图的方式去罗列出来 竞品分析文档 竞品分类 竞品选择 竞品采集 竞品文档书写 也可以做一个产品的产品结构图 需求文档 干系人 需求方 记录人 产品经理 其他项目干系人…

搭建企业级私有仓库harbor

华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…

LLM基础概念:Token

什么是token?为什么要限制token的输入?平时说的消耗token数指的是什么? token是用于自然语言处理的词的片段。 在自然语言处理模型中,限制token数量主要是出于计算效率和资源限制的考虑。每一个token都对应一个向量,…

Linux gadget 模拟触控屏 支持多点触控

通过gadget命令行生成hid设备 下面xxx自己根据需要修改,例如VID,PID,产品名称 const char *INSTALL_GADGET_CMDS[] {"modprobe libcomposite","mkdir /sys/kernel/config/usb_gadget/g1","echo xxx > /sys/kernel/config/…

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…

衡水中学资料大全-重构版(状元、学霸笔记)

文章目录 一、衡水中学:教育界的璀璨明珠二、状元笔记:学霸的智慧传承三、学霸笔记:高效学习的秘籍四、全面复习资料:覆盖所有考点五、思维导图:构建知识框架六、获取方式 一、衡水中学:教育界的璀璨明珠 …

【React】入门Day01 —— 从基础概念到实战应用

目录 一、React 概述 二、开发环境创建 三、JSX 基础 四、React 的事件绑定 五、React 组件基础使用 六、组件状态管理 - useState 七、组件的基础样式处理 快速入门 – React 中文文档 一、React 概述 React 是什么 由 Meta 公司开发,是用于构建 Web 和原生…