W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
前面章節(jié)介紹了如何創(chuàng)建一個自定義組件。該自定義組件內(nèi)部UI結(jié)構(gòu)固定,僅與使用方進(jìn)行數(shù)據(jù)傳遞。ArkUI還提供了一種更輕量的UI元素復(fù)用機(jī)制@Builder,@Builder所裝飾的函數(shù)遵循build()函數(shù)語法規(guī)則,開發(fā)者可以將重復(fù)使用的UI元素抽象成一個方法,在build方法里調(diào)用。
為了簡化語言,我們將@Builder裝飾的函數(shù)也稱為“自定義構(gòu)建函數(shù)”。
從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
定義的語法:
- @Builder MyBuilderFunction(){ ... }
使用方法:
- this.MyBuilderFunction()
定義的語法:
- @Builder function MyGlobalBuilderFunction(){ ... }
使用方法:
- MyGlobalBuilderFunction()
自定義構(gòu)建函數(shù)的參數(shù)傳遞有按值傳遞和按引用傳遞兩種,均需遵守以下規(guī)則:
按引用傳遞參數(shù)時,傳遞的參數(shù)可為狀態(tài)變量,且狀態(tài)變量的改變會引起@Builder方法內(nèi)的UI刷新。ArkUI提供$$作為按引用傳遞參數(shù)的范式。
- ABuilder( $$ : { paramA1: string, paramB1 : string } );
- @Builder function ABuilder($$: { paramA1: string }) {
- Row() {
- Text(`UseStateVarByReference: ${$$.paramA1} `)
- }
- }
- @Entry
- @Component
- struct Parent {
- @State label: string = 'Hello';
- build() {
- Column() {
- // 在Parent組件中調(diào)用ABuilder的時候,將this.label引用傳遞給ABuilder
- ABuilder({ paramA1: this.label })
- Button('Click me').onClick(() => {
- // 點擊“Click me”后,UI從“Hello”刷新為“ArkUI”
- this.label = 'ArkUI';
- })
- }
- }
- }
調(diào)用@Builder裝飾的函數(shù)默認(rèn)按值傳遞。當(dāng)傳遞的參數(shù)為狀態(tài)變量時,狀態(tài)變量的改變不會引起@Builder方法內(nèi)的UI刷新。所以當(dāng)使用狀態(tài)變量的時候,推薦使用按引用傳遞。
- @Builder function ABuilder(paramA1: string) {
- Row() {
- Text(`UseStateVarByValue: ${paramA1} `)
- }
- }
- @Entry
- @Component
- struct Parent {
- @State label: string = 'Hello';
- build() {
- Column() {
- ABuilder(this.label)
- }
- }
- }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: