自定义构建函数,多态样式,BuilderParams

自定义构建函数

@Builder 装饰的函数也称为自定义构建函数

如何使用构建函数

主要有两种使用方式,第一是:自定义组件内使用,第二是,全局自定义构建函数

自定义组件内使用

定义语法:

@Builder MyBuilderFunction(){ ... }

使用方法:

this.MyBuilderFunction()

允许在自定义组件内定义一个或多个@Builder方法,该方法被认为是该组件的私有、特殊类型的成

员函数。

自定义构建函数可以在所属组件的build方法和其他自定义构建函数中调用,但不允许在组件外调

用。

在自定义函数体中,this指代当前所属组件,组件的状态变量可以在自定义构建函数内访问。建议

通过this访问自定义组件的状态变量而不是参数传递。

全局自定义构建函数

定义的语法:@Builder function MyGlobalBuilderFunction(){ ... }

使用方法:MyGlobalBuilderFunction()

全局的自定义构建函数可以被整个应用获取,不允许使用 this bind 方法。

如果不涉及组件状态变化,建议使用全局的自定义构建方法。

全局自定义函数的问题

全局的自定义构建函数可以被整个应用获取(下一代可用-当前4.0暂不支持),不允许使用thisbind方法。

如果不涉及组件状态变化,建议使用全局的自定义构建方法。

补一句-如果数据是响应式的-此时该函数不会自动渲染-哪怕是全局自定义函数,不可被其他文件引

参数传递

自定义构建函数的参数传递有按值传递和按引用传递两种,均需遵守以下规则:

参数的类型必须与参数声明的类型一致,不允许undefinednull和返回undefinednull的表达式。

在自定义构建函数内部,不允许改变参数值。如果需要改变参数值,且同步回调用点,建议使用

@Link

@BuilderUI语法遵循 UI语法规则。

使用了 string 这种基础数据类型,即使它属于用State修饰的变量,也不会引起 UI的变化

按引用传递参数时,传递的参数可为状态变量,且状态变量的改变会引起@Builder方法内的UI刷新。

ArkUI提供$$作为按引用传递参数的范式。

ABuilder( $$ : 类型 );

也就是我们需要在builder中传入一个对象, 该对象使用$$(可使用其他字符)的符号来修饰,此时数据具

备响应式了

class CellParams {

leftTitle: string = ""

rightValue: string = ""

}

@Builder

function getCellContent($$: CellParams) {

        Row() {

        Row() {

                Text($$.leftTitle)

                Text($$.rightValue)

} .width('100%') .justifyContent(FlexAlign.SpaceBetween)

        .padding({

                left: 15,

                right: 15

        })

        .borderRadius(8)

        .height(40)

        .backgroundColor(Color.White)

}

.padding({

        left: 10,

        right: 10

})

}

同样的,全局Builder同样支持这种用法

使用 @Builder 复用逻辑的时候,支持传参可以更灵活的渲染UI

参数可以使用 状态数据 ,不过建议通过对象的方式传入 @Builder

构建函数-传递UI

Component可以抽提组件

Builder可以实现轻量级的UI复用

ArkTS提供了一个叫做 BuilderParam 的修饰符,你可以在组件中定义这样一个函数属性,在使用组件时直接传入

BuilderParam 只能应用在 Component 组件中,不能使用 Entry 修饰的组件中使用

需要注意的是,传入的函数必须是使用 Builder 修饰符修饰的

BuilderParams 类似于 Vue 中的插槽

1. 子组件中定义一个用 BuilderParam 修饰的函数

2. 父组件需要给子组件传入一个用 Builder 修饰的函数来赋值给子组件

3. 子组件要在想要显示插槽的地方来调用传入的方法

多态样式

@Styles@Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置

不同样式。这就是介绍的内容 stateStyles(又称为:多态样式)。

stateStyles 是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。ArkUI提供以下四

种状态:

focused:获焦态。

normal:正常态。

pressed:按压态。

disabled:不可用态。

.stateStyles({

        focused: {

                .backgroundColor(Color.Pink)

},

pressed: {

        .backgroundColor(Color.Black)

},

normal: {

        .backgroundColor(Color.Red)

}

})

@Styles和stateStyles联合使用

@Styles pressedStyle() {

        .backgroundColor(Color.Red)

}

.stateStyles({

        normal: this.normalStyle,

        pressed: this.pressedStyle,

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值