前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遥遥领先! HarmonyOS 自定义组件的结构、函数、变量、参数规定,这篇太干了我要渴死了!!!

遥遥领先! HarmonyOS 自定义组件的结构、函数、变量、参数规定,这篇太干了我要渴死了!!!

原创
作者头像
杨不易呀
发布2023-12-04 01:49:21
2.7K1
发布2023-12-04 01:49:21
举报
文章被收录于专栏:杨不易呀

前言

上一篇文章我们介绍了声明式UI描述和自定义组件的基本用法,现在我们系统的看看自定义组件的结构、成员函数、变量等.在 《遥遥领先,HaemonyOS的ArkTS应用入门实操》文章里面我们讲解了 ArkTS 的基本代码组成,这里我们看看具体的组件结构.

banner
banner

组件的基本结构

image.png
image.png

Struct 基本结构

自定义组件基于struct实现

struct + 自定义组件名 + {...}的组合构成自定义组件

  • 不能有继承关系
  • 对于struct的实例化 可以省略new
image.png
image.png

Custom components cannot extend or implement other classes and interfaces. <etsLint> 自定义组件无法扩展或实现其他类和接口。<etsLint> ⚠️ 自定义组件名、类名、函数名不能和系统组件名相同

Component 基本结构

@Component装饰器 仅能装饰struct关键字声明 的数据结构
image.png
image.png

A function or a method can only be decorated by one of the 'Extend, Builder and Styles'. <etsLint> 函数或方法只能由“扩展、生成器和样式”之一修饰。<etsLint>

  • struct被@Component装饰后具备组件化的能力
  • 需要实现build方法描述UI
image.png
image.png

This custom component must have a 'build' function. <etsLint> 此自定义组件必须具有“build”功能。<etsLint>

  • 一个struct只能被一个@Component装饰
image.png
image.png

Duplicate decorators for struct are not allowed. <etsLint> 不允许使用重复的 struct 装饰器。<etsLint>

Build 基本结构

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

image.png
image.png

This custom component must have a 'build' function. <etsLint> 此自定义组件必须具有“build”功能。<etsLint>

Build() 函数

所有声明在build()函数的语言,我们统称为UI描述.

  • @Entry装饰的自定义组件,其build()函数下的根节点唯一且必要,且必须为容器组件,其中ForEach禁止作为根节点。
  • @Component装饰的自定义组件,其build()函数下的根节点唯一且必要,可以为非容器组件,其中ForEach禁止作为根节点。
image.png
image.png

和 Vue2 一样需要根节点只能一个

  • 不允许声明本地变量
image.png
image.png
  • 不允许在UI描述里直接使用console.info,但允许在方法或者函数里使用
image.png
image.png
  • 不允许创建本地的作用域
image.png
image.png
  • 不允许调用没有用@Builder装饰的方法,允许系统组件的参数是TS方法的返回值
image.png
image.png
  • 不允许switch语法,如果需要使用条件判断那么就只能用 IF 来判断了
image.png
image.png
  • 不允许使用表达式
image.png
image.png

Entry 基本结构

@Entry装饰的自定义组件将作为UI页面的入口

在单个UI页面中,最多可以使用@Entry装饰一个自定义组件,将相当于 Java 当中的 Main 函数

image.png
image.png

Duplicate decorators for struct are not allowed. <etsLint> 不允许使用重复的 struct 装饰器。<etsLint>

函数/变量

自定义组件除了必须要实现build()函数外,还可以实现其他成员函数.成员函数具有以下约束.

  • 不支持静态函数。
  • 成员函数的访问是私有的。

自定义组件可以包含成员变量,成员变量具有以下约束:

  • 不支持静态成员变量。
  • 所有成员变量都是私有的,变量的访问规则与成员函数的访问规则相同。
  • 自定义组件的成员变量本地初始化有些是可选的,有些是必选的。具体是否需要本地初始化,是否 需要从父组件通过参数传递初始化子组件的成员变量

组件的参数规定

在上面的 Build函数当中我们讲到了可以在 build 当中使用方法或者使用 @Builder 来修饰的函数里创建自定义组件

我们在创建自定义组件的过程中,根据装饰器的规则来初始化自定义组件的参数

image.png
image.png
代码语言:go
复制
// Entry 标记当前组件是入口组件,比如Java当中的Main (标记后就变成了一个独立的页面)
@Entry
// Component 装饰器: 需要使用装饰器来标志(相当于 Java 里面的 Bean) 用来修饰类结构、方法、变量
@Component
// struct 结构体 就是一个自定义的组件,和VUE一样哪里都可以用
struct Order {
    // 定义变量
    // @State 变量名称: 变量类型(TS语法不知道的可以去学学基础) = 对应变量类型的数据
    @State message: string = 'Hello World'
    private flag: string = '父组件私有'

    // 构建组件为页面元素
    build() {
        // 根节点唯一且必要,必须为容器组件
        Row() {
            ParentComponent({ countDownFrom: 36, flag: this.flag })
            .onClick(() => {
                console.info('方法或者函数里面允许!');
            })
        }
    }
}

// 子组件
@Component
struct ParentComponent {
    private countDownFrom: number = 0;
    private flag: string = '子组件私有'

    build() {
        Column() {
            Text(`${this.countDownFrom}`).fontSize(30)
            Divider()
            Text(`${this.flag}`).fontSize(30)
        }
    }
}

ok 自定义组件的知识点差不多搞定,还剩下一些装饰器的玩法.

最后

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

img
img

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 组件的基本结构
    • Struct 基本结构
      • Component 基本结构
        • Build 基本结构
          • Build() 函数
            • Entry 基本结构
            • 函数/变量
            • 组件的参数规定
            • 最后
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档