OpenHarmony自定義構建函式:@Builder裝飾器
前面章節介紹瞭如何建立一個自定義元件。該自定義元件內部UI結構固定,僅與使用方進行資料傳遞。ArkUI還提供了一種更輕量的UI元素複用機制@Builder,@Builder所裝飾的函式遵循build()函式語法規則,開發者可以將重複使用的UI元素抽象成一個方法,在build方法裡呼叫。
為了簡化語言,我們將@Builder裝飾的函式也稱為“自定義構建函式”。
說明:
從API version 9開始,該裝飾器支援在ArkTS卡片中使用。
裝飾器使用說明
自定義元件內自定義構建函式
定義的語法:
@Builder MyBuilderFunction() { ... }
使用方法:
this.MyBuilderFunction() { ... }
● 允許在自定義元件內定義一個或多個自定義構建函式,該函式被認為是該元件的私有、特殊型別的成員函式。
● 自定義構建函式可以在所屬元件的build方法和其他自定義構建函式中呼叫,但不允許在元件外呼叫。
● 在自定義函式體中,this指代當前所屬元件,元件的狀態變數可以在自定義構建函式內訪問。建議透過this訪問自定義元件的狀態變數而不是引數傳遞。
全域性自定義構建函式
定義的語法:
@Builder function MyGlobalBuilderFunction() { ... }
使用方法:
MyGlobalBuilderFunction()
● 全域性的自定義構建函式可以被整個應用獲取,不允許使用this和bind方法。
● 如果不涉及元件狀態變化,建議使用全域性的自定義構建方法。
引數傳遞規則
自定義構建函式的引數傳遞有 按值傳遞 和 按引用傳遞 兩種,均需遵守以下規則:
● 引數的型別必須與引數宣告的型別一致,不允許undefined、null和返回undefined、null的表示式。
● 在@Builder修飾的函式內部,不允許改變引數值。
● @Builder內UI語法遵循 UI語法規則 。
按引用傳遞引數
按引用傳遞引數時,傳遞的引數可為狀態變數,且狀態變數的改變會引起@Builder方法內的UI重新整理。ArkUI提供$$作為按引用傳遞引數的正規化。
class ABuilderParam { paramA1: string = '' paramB1: string = '' } @Builder function ABuilder($$ : ABuilderParam) {...} class ABuilderParam { paramA1: string = '' } @Builder function ABuilder($$: ABuilderParam) { Row() { Text(`UseStateVarByReference: ${$$.paramA1} `) } } @Entry @Component struct Parent { @State label: string = 'Hello'; build() { Column() { // Pass the this.label reference to the ABuilder component when the ABuilder component is called in the Parent component. ABuilder({ paramA1: this.label }) Button('Click me').onClick(() => { // After Click me is clicked, the UI text changes from Hello to ArkUI. this.label = 'ArkUI'; }) } } }
按值傳遞引數
呼叫@Builder裝飾的函式預設按值傳遞。當傳遞的引數為狀態變數時,狀態變數的改變不會引起@Builder方法內的UI重新整理。所以當使用狀態變數的時候,推薦使用 按引用傳遞 。
@Builder function ABuilder(paramA1: string) { Row() { Text(`UseStateVarByValue: ${paramA1} `) } } @Entry @Component struct Parent { label: string = 'Hello'; build() { Column() { ABuilder(this.label) } } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2986084/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [一、基本語法]4@Builder裝飾器:自定義構建函式UI函式
- OpenHarmony裝飾指定自定義元件:@BuilderParam裝飾器元件UI
- 裝飾器函式函式
- OpenHarmony定義元件重用樣式:@Styles裝飾器元件
- Django 常用的自定義裝飾器Django
- 裝飾器,匿名函式函式
- 函式物件、裝飾器、閉包函式函式物件
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Java構建器(Builder)JavaUI
- Python之函式裝飾器Python函式
- 閉包函式,裝飾器詳解函式
- Day10:函式與裝飾器函式
- Python函式裝飾器高階用法Python函式
- 13. 閉包函式與裝飾器函式
- shell自定義函式函式
- Oracle 自定義函式Oracle函式
- perl自定義函式函式
- Eloquent ORM 自定義 builderORMUI
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- 自定義生成器函式模擬Python內建函式filter()函式PythonFilter
- Python裝飾函式Python函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- Hive常用函式及自定義函式Hive函式
- 【Flask】路由裝飾器、路徑傳參、自定義路由轉換器Flask路由
- 工廠模式建立物件和自定義建構函式建立物件的異同模式物件函式
- Kotlin 主建構函式引數的修飾符Kotlin函式
- [提問交流]建議:預載入自定義函式函式
- 測開之函式進階· 第7篇《裝飾器裝飾類,通用裝飾器,有啥區別呢?》函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- MySQL建立自定義函式MySql函式
- python 自定義函式Python函式
- oracle 自定義聚合函式Oracle函式
- mysql自定義函式篇MySql函式
- Oracle中自定義函式Oracle函式
- 一個自定義函式函式
- Oracle自定義聚集函式Oracle函式
- ORACLE 自定義函式BUG?Oracle函式