Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【OpenHarmony】ArkTS 语法基础 ⑦ ( 声明式 UI 的特征 | 声明式描述 | 状态驱动视图更新 | 创建并使用自定义组件 | 设置组件属性 | 自定义组件配置 | 容器组件设置 )

【OpenHarmony】ArkTS 语法基础 ⑦ ( 声明式 UI 的特征 | 声明式描述 | 状态驱动视图更新 | 创建并使用自定义组件 | 设置组件属性 | 自定义组件配置 | 容器组件设置 )

作者头像
韩曙亮
发布于 2024-06-07 07:28:45
发布于 2024-06-07 07:28:45
46300
代码可运行
举报
运行总次数:0
代码可运行

参考文档 : <HarmonyOS第一课>ArkTS开发语言介绍

博客源码 :

一、声明式 UI 的特征

1、声明式 UI 的特征

声明式 UI 的特征 :

  • 声明式描述 : 在 build 函数中 , 描述 UI 组件呈现的结果 ;
  • 状态驱动视图更新 : 通过 @State / @Link 等装饰器 定义 状态数据 , 在 UI 组件中 , 使用这些状态数据进行 数据渲染 , 一旦 状态数据改变则重新调用 build 函数进行渲染 ;
    • 开发过程中 , 开发者不会直接操作 UI 组件 , 而是通过 修改 状态数据 而改变 UI 组件的渲染状态 ;

2、声明式描述

在下面的 build 函数中 , 描述了 Column 布局组件 和 MyComponent 自定义组件 / Text 组件 的 展示效果 ,

MyComponent 自定义组件 和 Text 组件 在 Column 布局组件 中纵向排列 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
struct Example {

  // 父容器中的状态数据
  @State isFatherSelected: boolean = false;
  
  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent({isSonSelected: $isFatherSelected});

      // 另外的子组件
      Text('父容器状态 : ' + this.isFatherSelected)
        .fontSize(20)
        .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
        .backgroundColor(Color.Black)
    }
  }

下面的代码中 , 红色矩形框中的内容是 声明式描述 ;

3、状态驱动视图更新

" 状态 " 是 驱动 UI 视图 变化的数据源 , 一般是由 @State 装饰器 装饰的变量 ;

UI 视图 在 渲染时 , 使用了该 状态 变量 , 则该 视图 就与该 状态 进行了关联绑定 , 当 状态数据 发生改变时 , 视图也会进行刷新 重新渲染 ;

在上述 自定义组件 中 , 定义了 @State isFatherSelected: boolean 状态数据 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  @State isFatherSelected: boolean = false;

在 Text 组件中 , 使用了该状态数据进行了渲染 ,

  • 如果 isFatherSelected 值为 true , 则将文本颜色设置为 黄色 ;
  • 如果 isFatherSelected 值为 false , 则将文本颜色设置为 白色 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      // 另外的子组件
      Text('父容器状态 : ' + this.isFatherSelected)
        .fontSize(20)
        .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
        .backgroundColor(Color.Black)

4、完整代码

上面讲解的代码的 完整代码如下 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 导入外部自定义子组件
import {MyComponent} from '../view/MyComponent';

@Entry
@Component
struct Example {

  // 父容器中的状态数据
  @State isFatherSelected: boolean = false;

  aboutToAppear(){
    console.log("HSL Example aboutToAppear")
  }

  onPageShow() {
    console.log("HSL Example onPageShow")
  }

  onBackPress() {
    console.log("HSL Example onBackPress")
  }

  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent({isSonSelected: $isFatherSelected});

      // 另外的子组件
      Text('父容器状态 : ' + this.isFatherSelected)
        .fontSize(20)
        .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
        .backgroundColor(Color.Black)
    }
  }

  onPageHide() {
    console.log("HSL Example onPageHide")
  }

  aboutToDisappear(){
    console.log("HSL Example aboutToDisappear")
  }

}

二、创建并使用自定义组件


1、自定义组件定义

自定义组件概念 : 通过将

  • OpenHarmony 系统 内置的基础组件 ,
  • 其它自定义组件 ,

封装起来 , 得到一个 可重用 的 , 可与其它组件组合使用的 UI 单元 , 这就是 自定义组件 ;

自定义组件 , 一般使用 @Component 装饰器 进行装饰 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
export struct MyComponent {

2、自定义组件声明

定义完 自定义组件 A 之后 , 还需要在 使用该 自定义组件的 " 另外的 自定义组件 B " 中 的 build() 渲染函数中的 某个 布局组件 中 , 调用 自定义组件 A 的 构造函数 声明该组件 ;

build() 函数 是 进行 " 声明式 UI 描述 " 的位置 ;

一个 布局组件 中 , 使用 大括号 描述 该布局组件 中 有哪些子组件 , 在 布局组件 构造函数 后的 大括号 中 , 声明 其它组件 , 就是将 被声明的组件 , 放入了 布局组件中 ;

代码示例 : 在 Example 组件中 , 使用 MyComponent 自定义组件 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
struct Example {
  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent({isSonSelected: $isFatherSelected});

      // 另外的子组件
      Text('父容器状态 : ' + this.isFatherSelected)
        .fontSize(20)
        .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
        .backgroundColor(Color.Black)
    }
  }

三、设置组件属性


1、自定义组件配置

在 ArkTS 中 , 支持使用 . 运算符 的 方式 , 设置 组件的属性 ,

具体的 属性参考 , 可以查询 DevEco Studio 的 API 参考文档 ;

设置 Text 文本组件的 一系列属性 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 另外的子组件
Text('父容器状态 : ' + this.isFatherSelected)
  .fontSize(20)
  .fontWeight(FontWeight.Bold)
  .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
  .backgroundColor(Color.Black)

在 API 参考 窗口 中 , 可以查看要设置哪些属性 ;

2、容器组件设置

容器组件 是 用于描述 多个组件 之间的 布局关系的 组件 , 又称为 " 布局组件 " ;

容器组件 可以在 OpenHarmony 的 ArkTS 组件 的 容器组件 下面查询 , 下面 API 参考窗口中 , 显示的是 Column 容器组件的属性 ;

在下面的布局声明中 , Column 布局组件中 , 放置了 2 个子组件 , 上下排列 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  build() {
    // 必须使用布局组件包括子组件
    Column(){
      // 自定义子组件
      MyComponent({isSonSelected: $isFatherSelected});

      // 另外的子组件
      Text('父容器状态 : ' + this.isFatherSelected)
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .fontColor(this.isFatherSelected ? Color.Yellow : Color.White)
        .backgroundColor(Color.Black)
    }
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年11月 HarmonyOS教学课程 002-ArkTS语言(基本语法)
HarmonyOS的ArkTS语言是一种基于TypeScript开发的语言,它专为HarmonyOS系统开发而设计。ArkTS语言结合了JavaScript的灵活性和TypeScript的严谨性,使得开发者能够快速、高效地开发出高质量的HarmonyOS应用程序。
愚公搬代码
2025/06/02
1620
【愚公系列】2023年11月 HarmonyOS教学课程 002-ArkTS语言(基本语法)
鸿蒙声明式 UI 开发:从范式革新到工程实践全指南
在软件界面开发领域,存在两种截然不同的编程范式:命令式 UI 如同精密的机械操作手册,开发者需逐行指令控制 UI 元素的创建、属性设置与交互逻辑。以 Android 开发为例,创建基础按钮需经历对象实例化、属性配置、事件绑定等多步操作:
谢道韫
2025/06/14
880
鸿蒙Next仓颉语言开发实战教程:设置页面
导航栏还是老样式,介绍过很多次了,今天不再赘述。这个页面的内容主要还是介绍List容器的使用。
幽蓝计划
2025/06/15
630
【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 | @State 装饰器定义状态数据 | 使用状态数据渲染组件 )
@State 装饰器参考文档 : https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/arkts-state-0000001474017162-V2
韩曙亮
2024/06/07
1910
【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 | @State 装饰器定义状态数据 | 使用状态数据渲染组件 )
【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 | if else 条件渲染 | ForEach 循环渲染 )
在下面的代码中 , 根据 自定义组件 的 this.num1 成员变量的值 , 决定 Text 组件的渲染样式 ,
韩曙亮
2024/06/05
6460
【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 | if else 条件渲染 | ForEach 循环渲染 )
鸿蒙智联汽车【1.0】
智能汽车是集环境感知、规划决策、多等级辅助驾驶等功能于一体的智能网联综合系统,它集中运用了计算机、现代传感、信息融合、通讯、人工智能及自动控制等技术,是典型的高新技术综合体。简单的说,智能汽车的出现将逐步放松车、手、眼,让开车,用车变得简单。这样的产品对有本儿不敢上路的人来说或许是大大的福音。
徐建国
2022/12/05
7240
鸿蒙智联汽车【1.0】
【OpenHarmony】ArkTS 语法基础 ② ( ArkTS 自定义组件 | 自定义可导入组件 - export 声明模块 | 导入自定义组件 - import 导入组件 )
ArkTS 语言的 @Component 组件 , 用于修饰 struct 结构 , 表示自定义组件 , 定义的自定义组件 可以用在 其它组件中 ;
韩曙亮
2024/06/04
1.1K0
【OpenHarmony】ArkTS 语法基础 ② ( ArkTS 自定义组件 | 自定义可导入组件 - export 声明模块 | 导入自定义组件 - import 导入组件 )
【OpenHarmony】ArkTS 语法基础 ⑥ ( ArkTS 状态管理 | @Link 装饰器 | 子组件定义使用 @Link 变量 | 父容器中定义 @State 变量并绑定子组件变量 )
@Link 装饰器 参考文档 : https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/arkts-link-0000001524297305-V2
韩曙亮
2024/06/07
1K0
【OpenHarmony】ArkTS 语法基础 ⑥ ( ArkTS 状态管理 | @Link 装饰器 | 子组件定义使用 @Link 变量 | 父容器中定义 @State 变量并绑定子组件变量 )
【HarmonyOS之旅】ArkTS语法(二)->动态构建UI元素
可通过@Builder装饰器进行描述,该装饰器可以修饰一个函数,此函数可以在build函数之外声明,并在build函数中或其他@Builder修饰的函数中使用,从而实现在一个自定义组件内快速生成多个布局内容。
枫叶丹
2024/12/29
1990
【HarmonyOS之旅】ArkTS语法(二)->动态构建UI元素
【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )
ArkTS 的 @Component 自定义组件 生命周期 从创建 到 销毁的全过程 , 如下图所示 :
韩曙亮
2024/06/05
1.3K0
【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )
HarmonyOS NEXT 鸿蒙实现自定义组件插槽
在HarmonyOS NEXT中,如何实现类似Vue-Slot或React-RenderProps的功能?即允许将UI结构的函数(被@Builder修饰的函数)作为参数传递给组件,并在组件内的指定位置渲染,可以使用@BuilderParam装饰器。
一梦南柯
2025/03/12
1470
HarmonyOS NEXT 鸿蒙实现自定义组件插槽
鸿蒙(HarmonyOS)应用开发之性能优化实战-组件复用
若开发者的应用中存在以下场景,并成为UI线程的帧率瓶颈,应该考虑使用组件复用机制提升应用性能:
小帅聊鸿蒙
2024/10/16
3900
鸿蒙(HarmonyOS)应用开发之性能优化实战-组件复用
ArkTS-stateStyles多态样式
@Styles和@Extend仅仅应用于静态页面的样式复用,stateStyles可以根据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)
酒楼
2023/06/27
5080
鸿蒙(HarmonyOS)性能优化实战-状态管理
为了帮助应用程序开发人员提高其应用程序质量,特别是在高效的状态管理方面。本章节面向开发者提供了多个在开发ArkUI应用中常见的低效开发的场景,并给出了对应的解决方案。此外,还提供了同一场景下,推荐用法和不推荐用法的对比和解释说明,更直观地展示两者区别,从而帮助开发者学习如何正确地在应用开发中使用状态变量,进行高性能开发。
小帅聊鸿蒙
2024/10/19
1790
鸿蒙(HarmonyOS)性能优化实战-状态管理
鸿蒙自定义组件生命周期
组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:
龙儿筝
2024/11/19
2050
鸿蒙自定义组件生命周期
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。
爱吃土豆丝的打工人
2023/10/15
4200
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
鸿蒙原生应用从设置页看自定义组件的使用
IDE:DevEco Studio 4.0 Release Build Version: 4.0.0.600, built on October 17, 2023
徐建国
2024/01/11
8300
鸿蒙原生应用从设置页看自定义组件的使用
ArkTS页面自定义弹窗时变量双向同步功能
当开发者想针对父组件中某个数据对象的部分信息进行同步时,使用@Link就不能满足要求。如果这些部分信息是一个类对象,就可以使用@ObjectLink配合@Observed来实现。
小帅聊鸿蒙
2024/09/18
1370
ArkTS页面自定义弹窗时变量双向同步功能
CPU都被干冒烟了,拥抱HarmonyOS第二天,自定义组件
自从经历了第一天惨痛的踩坑经历之后,我机智的拉了一个 HarmonyOS app 学习讨论群。虽然目前只有寥寥数人,但个个都是大佬,有点什么问题随便探讨一下我就有灵感了,比我自己一个人蒙头研究确实进度快了许多
用户6901603
2023/12/12
3340
CPU都被干冒烟了,拥抱HarmonyOS第二天,自定义组件
【HarmonyOS应用开发——ArkTS语言】购物商城的实现【合集】
该组件构建了一个具有特定布局和功能的界面,包含了搜索栏、轮播图、网格布局展示分类以及推荐好物相关展示等内容。
Rossy Yan
2024/12/24
3950
【HarmonyOS应用开发——ArkTS语言】购物商城的实现【合集】
推荐阅读
【愚公系列】2023年11月 HarmonyOS教学课程 002-ArkTS语言(基本语法)
1620
鸿蒙声明式 UI 开发:从范式革新到工程实践全指南
880
鸿蒙Next仓颉语言开发实战教程:设置页面
630
【OpenHarmony】ArkTS 语法基础 ⑤ ( ArkTS 状态管理 | @State 装饰器定义状态数据 | 使用状态数据渲染组件 )
1910
【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 | if else 条件渲染 | ForEach 循环渲染 )
6460
鸿蒙智联汽车【1.0】
7240
【OpenHarmony】ArkTS 语法基础 ② ( ArkTS 自定义组件 | 自定义可导入组件 - export 声明模块 | 导入自定义组件 - import 导入组件 )
1.1K0
【OpenHarmony】ArkTS 语法基础 ⑥ ( ArkTS 状态管理 | @Link 装饰器 | 子组件定义使用 @Link 变量 | 父容器中定义 @State 变量并绑定子组件变量 )
1K0
【HarmonyOS之旅】ArkTS语法(二)->动态构建UI元素
1990
【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )
1.3K0
HarmonyOS NEXT 鸿蒙实现自定义组件插槽
1470
鸿蒙(HarmonyOS)应用开发之性能优化实战-组件复用
3900
ArkTS-stateStyles多态样式
5080
鸿蒙(HarmonyOS)性能优化实战-状态管理
1790
鸿蒙自定义组件生命周期
2050
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
4200
鸿蒙原生应用从设置页看自定义组件的使用
8300
ArkTS页面自定义弹窗时变量双向同步功能
1370
CPU都被干冒烟了,拥抱HarmonyOS第二天,自定义组件
3340
【HarmonyOS应用开发——ArkTS语言】购物商城的实现【合集】
3950
相关推荐
【愚公系列】2023年11月 HarmonyOS教学课程 002-ArkTS语言(基本语法)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验