鸿蒙 自定义组件

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、自定义组件基本概念

在鸿蒙OS开发中,自定义组件是根据业务需求将系统组件进行扩展和封装,形成可复用的新组件。自定义组件具有以下核心特点:

  1. 可组合性:能够组合使用系统组件及其属性和方法 
  2. 可重用性:可以在不同父组件或容器中多次实例化使用 
  3. 数据驱动:通过状态变量变化自动驱动UI刷新 

二、创建步骤

1. 基本结构定义

@Component
struct MyComponent {
  @State message: string = 'Hello, World!';

  build() {
    Row() {
      Text(this.message)
        .onClick(() => {
          this.message = 'Hello, ArkUI!';
        })
    }
  }
}

关键要素:

  • @Component装饰器:使struct具备组件化能力 
  • build()函数:必须实现,用于描述UI结构 
  • @State装饰器:管理组件内部状态 

备注:如果在其他文件中引用自定义组件,需要使用export关键字进行导出,然后在使用的页面import导入该自定义组件。

2. 组件参数传递

// 父组件使用
@Entry
@Component
struct ParentComponent {
  build() {
    Column() {
      MyComponent({ message: '自定义文本' })
    }
  }
}

备注:

  • @Entry装饰的自定义组件将作为UI页面的入口。在单个UI页面中,仅允许存在一个。@Entry可以接受一个可选的LocalStorage参数。
  • @Entry装饰的自定义组件,其build()函数下的根节点唯一且必须为容器组件。
  • @Component装饰的自定义组件,其build()函数下的根节点唯一可以为非容器组件。

三、注意事项

1. 组件生命周期

自定义组件包含以下生命周期回调:

  • aboutToAppear:组件即将显示时触发
  • aboutToDisappear:组件即将销毁时触发

注意:避免在生命周期函数中执行耗时操作

2. 样式继承与隔离

  • 自定义组件默认不继承父组件样式
  • 使用@Styles装饰器定义可复用样式
  • 通过@Extend实现样式扩展

重要:组件内部样式不应影响外部布局

3. 事件处理规范

// 子组件定义事件
@Component
struct ChildComponent {
  @Prop onCustomEvent: () => void;
  
  build() {
    Button('触发事件')
      .onClick(() => {
        this.onCustomEvent?.();
      })
  }
}

// 父组件使用
ChildComponent({
  onCustomEvent: () => {
    console.log('事件触发');
  }
})

建议

  1. 事件命名使用小驼峰格式 
  2. 避免在事件回调中直接修改父组件状态 
  3. 复杂逻辑应提取到单独方法中 

4. 性能优化

  1. 合理使用@Reusable装饰器
   @Reusable
   @Component
   struct ReusableComponent {
     // ...
   }

   使组件能够被框架复用。

   2. 避免不必要的重建

  1. 使用@Link替代频繁的@Prop更新
  2. 复杂组件考虑拆分状态管理

  3. 列表渲染优化

   ForEach(this.items, (item) => {
     ListItem(item)
   }, (item) => item.id.toString()) // 必须提供key

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值