• 作者:老汪软件技巧
  • 发表时间:2024-08-29 17:02
  • 浏览量:

鸿蒙应用开发-拿捏自定义组件介绍

在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件\textcolor{Red}{自定义组件}自定义组件。在平常开发中,@Builder复用机制会被经常使用,但其功能远不如自定义组件强大,@Builder通常是在一个页面之间的复用,而自定义组件通常用于多个页面之间的复用。

运用场景

上述的两张图片分别代表两个弹窗,中间分别对应了不同的内容。这种样式通常情况下在实际开发中,我们会使用自定义组件将两个部分的共同区域提取出来,最后在调用其时加上属于自己的内容部分即可。

定义

// 定义
@Component
struct MyComponent {
  // 状态变量
  @State message:string ='我是'
  build(){
     Text(this.message)
  }
}
//使用
@Entry
@Component
struct Index {
	build(){
        Column{
           MyComponent()//无参数使用
           MyComponent({message:'我是Sugar'})//传参数使用   
        }
    }
}

由上述定义可以看出跟普通样式就差在一个@Entry修饰,@Entry装饰的自定义组件将作为UI页面的入口,也就是说拥有它来修饰就代表一个独立的页面。

自定义组件除了必须要实现build()函数外,还可以定义其他的成员函数,以及成员变量。

@Component
struct MyComponent {
  // 状态变量
  @State message:string=''
  // 成员变量-数据
  info:string = ''
  // 成员变量-箭头函数
  sayHello=()=>{}
  // 成员函数
  sayHi(){}
  build(){
    // UI
  }
}

!!!\textcolor{Red}{!!!}!!!这边需要注意:

与类不同,自定义组件不支持静态函数、静态成员变量自定义组件的成员函数、变量均为私有成员变量/函数的使用

// 定义
@Component
struct MyComponent {
  @State message:string ='我是'
  info:string='我很开心'
  sayHello=()=>{
  }
  sayhi(){
    console.log('你好')
  }
  build(){
    Column(){
      Text(this.message)
      Text(this.info)
      Button('修改数据')
        .onClick(()=>{
          this.info='我很高兴'
          this.message='我是悟空'
          this.sayhi()
          this.sayHello()
        })
    }
  }
}
//使用
@Entry
@Component
struct Index{
  build(){
    Column(){
      MyComponent()//无参数使用
      MyComponent({message:'我是Sugar'})//传参数使用
      MyComponent({sayHello(){console.log('hello')}})//函数
    }
  }
}

解析:

这里我们无参数传递时使用自定义组件,所以message和info都为默认值,sayhi()日志输出,sayHello()为空,最后点击按钮后,只有状态变量message被更改,不是状态变量的info改变不会引起UI更改。

这里我们传递了一个参数值进去,所以一开始message的值被覆盖,显示为“我是Sugar”,点击按钮后的变化与无参数传递一样。

应用组件是什么_系统应用组件_

最后一种是传递了sayHello()的逻辑处理进去,所以在按下按钮后日志会多输出hello。

通用样式事件

自定义组件可以通过点语法的形式设置通用样式,通用事件。

@BuilderParam传递UI单参数传递

总的来说,参数,通用样式都讲过了,那么==不通用的组件==肯定放在{}中啦。

实现过程:

在子组件中设置默认的Builder,避免外部不传入定义BuilderParam接受外部传入的ui,并设置默认值使用@BuilderParam装饰的成员变量

多参数传递

子组件有多个BuilderParam,必须通过参数的方式来传入。

首先我们在父组件中使用@Builder将需要传入的组件进行封装。

在父组件中传入组件

在子组件中三步接受并使用ui

最终效果:

好了,本期就分享到这里,如果大家喜欢的文章,不要忘记点赞关注我哦!!!