【鸿蒙HarmonyOS开发笔记】自定义组件详解

本文详细介绍了如何在ArkTS中创建和使用自定义组件,包括struct关键字的声明、build方法的运用、组件属性的设置、@Component和@Entry装饰器的作用,以及组件的传参和模块化管理。
摘要由CSDN通过智能技术生成

自定义组件

除去系统预置的组件外,ArkTS 还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。

我们开发的每个页面其实都可以视为自定义组件+内置组件的结合


语法说明

自定义组件的语法如下图所示
在这里插入图片描述

各部分语法说明如下:

struct关键字

structArkTS新增的用于自定义组件或者自定义弹窗的关键字。其声明的数据结构和TS中的类十分相似,可包含属性和方法。


build方法

build()方法用于声明自定义组件的UI结构。


● 组件属性

组件属性可用作自定义组件的参数,使得自定义组件更为通用。


@Compnent装饰器
@Component装饰器用于装饰struct关键字声明的数据结构。struct@Component装饰后才具备组件化的能力。

注: 装饰器是Typescript中的一种特殊语法,常用于装饰类、方法、属性,用于修改或扩展其原有的行为。


@Entry装饰器
标识该组件为组件树的根节点

在鸿蒙应用中,每个页面都是由一些列组件组合而成的,并且这些组件都是逐层嵌套的,因此这些组件最终形成了一个组件树的结构,如下图所示
在这里插入图片描述
我们前边所编写的每个页面就相当于是组件树的根节点,而@Entry装饰器的作用就是标识该组件为组件树的根节点,也就是一个页面的入口组件


自定义组件传参

现在自定义一个组件,代码如下

@Component
struct SwitchButton {
    color: Color = Color.Blue;

    build() {
        Button({ type: ButtonType.Circle }) {
            Image('pages/helloworld/custom/solution/images/icon_switch.png')
                .width(30)
                .width(30)
        }.width(50)
        .height(50)
        .backgroundColor(this.color)
    }
}

那么当我们使用的时候想修改color的时候只需要在组件中传参即可,要注意参数名需要一致

Row({ space: 50 }) {
    SwitchButton({ color: Color.Red })
        .onClick(() => {
            this.isOn = false
        })
    SwitchButton({ color: Color.Green })
        .onClick(() => {
            this.isOn = true;
        })
}

自定义组件模块化

我们可以把自定义组件单独放在一个文件夹里,方便管理

那么使用的时候就需要导入导入

导出

@Component
export struct SwitchButton {
    color: Color = Color.Blue;

    build() {
        Button({ type: ButtonType.Circle }) {
            Image('pages/helloworld/custom/solution/images/icon_switch.png')
                .width(30)
                .width(30)
        }.width(50)
        .height(50)
        .backgroundColor(this.color)
    }
}

导入

import { SwitchButton  } from './SwitchButton ';
@Entry
@Component
struct HelloWorldPage {
  @State isOn: boolean = false;

  build() {
      Row({ space: 50 }) {
    	SwitchButton({ color: Color.Red })
        .onClick(() => {
            this.isOn = false
        })
    	SwitchButton({ color: Color.Green })
        .onClick(() => {
            this.isOn = true;
        })
}
    }
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值