前言
自定義組件 的生命周期回調(diào)函數(shù)用于通知用戶該自定義組件的生命周期虚茶,這些回調(diào)函數(shù)是私有的,在運(yùn)行時(shí)由開發(fā)框架在特定的時(shí)間進(jìn)行調(diào)用仇参,不能從應(yīng)用程序中手動(dòng)調(diào)用這些回調(diào)函數(shù)嘹叫。
下圖展示的是被@Entry裝飾的 組件生命周期:
今天根據(jù)上面的流程圖,我們從自定義組件的初始創(chuàng)建诈乒、重新渲染和刪除來一一詳細(xì)解釋。
說明:允許在生命周期函數(shù)中使用Promise和異步回調(diào)函數(shù)怕磨,比如網(wǎng)絡(luò)資源獲取喂饥,定時(shí)器設(shè)置等;
aboutToAppear
aboutToAppear?(): void
aboutToAppear函數(shù)在創(chuàng)建自定義組件的新實(shí)例后肠鲫,在執(zhí)行其build()函數(shù)之前執(zhí)行员帮。允許在aboutToAppear函數(shù)中改變狀態(tài)變量,更改將在后續(xù)執(zhí)行build()函數(shù)中生效导饲。
注意??:從API version 9開始集侯,該接口支持在ArkTS卡片中使用。
aboutToDisappear
aboutToDisappear?(): void
aboutToDisappear函數(shù)在自定義組件析構(gòu)銷毀之前執(zhí)行帜消。不允許在aboutToDisappear函數(shù)中改變狀態(tài)變量棠枉,特別是@Link變量的修改可能會(huì)導(dǎo)致應(yīng)用程序行為不穩(wěn)定。
注意??:從API version 9開始泡挺,該接口支持在ArkTS卡片中使用辈讶。
onPageShow
onPageShow?(): void
頁面每次顯示時(shí)觸發(fā)一次,包括路由過程娄猫、應(yīng)用進(jìn)入前臺(tái)等場(chǎng)景贱除,僅@Entry裝飾的自定義組件生效。
onPageHide
onPageHide?(): void
頁面每次隱藏時(shí)觸發(fā)一次媳溺,包括路由過程月幌、應(yīng)用進(jìn)入前后臺(tái)等場(chǎng)景,僅@Entry裝飾的自定義組件生效悬蔽。
onBackPress
onBackPress?(): void
當(dāng)用戶點(diǎn)擊返回按鈕時(shí)觸發(fā)扯躺,僅@Entry裝飾的自定義組件生效。
@Entry
@Component
struct IndexComponent {
@State textColor: Color = Color.Black;
onPageShow() {
this.textColor = Color.Blue;
console.info('IndexComponent onPageShow');
}
onPageHide() {
this.textColor = Color.Transparent;
console.info('IndexComponent onPageHide');
}
onBackPress() {
this.textColor = Color.Red;
console.info('IndexComponent onBackPress');
}
build() {
Column() {
Text('Hello World')
.fontColor(this.textColor)
.fontSize(30)
.margin(30)
}.width('100%')
}
}
onLayout9+
onLayout?(children: Array<LayoutChild>, constraint: ConstraintSizeOptions): void
框架會(huì)在自定義組件布局時(shí),將該自定義組件的子節(jié)點(diǎn)信息和自身的尺寸范圍通過onLayout傳遞給該自定義組件录语。不允許在onLayout函數(shù)中改變狀態(tài)變量倍啥。
注意??:從API version 9開始,該接口支持在ArkTS卡片中使用澎埠。
參數(shù)說明:
參數(shù)名稱 | 參數(shù)類型 | 參數(shù)說明 |
---|---|---|
children | Array<LayoutChild> | 子組件布局信息虽缕。 |
constraint | ConstraintSizeOptions | 父組件constraint信息。 |
onMeasure9+
onMeasure?(children: Array<LayoutChild>, constraint: ConstraintSizeOptions): void
框架會(huì)在自定義組件確定尺寸時(shí)蒲稳,將該自定義組件的子節(jié)點(diǎn)信息和自身的尺寸范圍通過onMeasure傳遞給該自定義組件氮趋。不允許在onMeasure函數(shù)中改變狀態(tài)變量。
注意??:從API version 9開始江耀,該接口支持在ArkTS卡片中使用剩胁。
參數(shù)說明:
參數(shù)名稱 | 參數(shù)類型 | 參數(shù)說明 |
---|---|---|
children | Array<LayoutChild> | 子組件布局信息。 |
constraint | ConstraintSizeOptions | 父組件constraint信息决记。 |
LayoutChild9+
子組件布局信息。
從API version 9開始倍踪,該接口支持在ArkTS卡片中使用系宫。
參數(shù)名稱 | 參數(shù)類型 | 描述 |
---|---|---|
name | string | 子組件名稱。 |
id | string | 子組件id建车。 |
constraint | ConstraintSizeOptions | 子組件約束尺寸扩借。 |
borderInfo | LayoutBorderInfo | 子組件border信息。 |
position | Position | 子組件位置坐標(biāo)缤至。 |
measure | (childConstraint: ConstraintSizeOptions) => void | 調(diào)用此方法對(duì)子組件的尺寸范圍進(jìn)行限制潮罪。 |
layout | (LayoutInfo: LayoutInfo) => void | 調(diào)用此方法對(duì)子組件的位置信息進(jìn)行限制。 |
LayoutBorderInfo9+
子組件border信息领斥。
從API version 9開始嫉到,該接口支持在ArkTS卡片中使用。
參數(shù)名稱 | 參數(shù)類型 | 描述 |
---|---|---|
borderWidth | EdgeWidths | 邊框?qū)挾阮愋驮侣澹糜诿枋鼋M件邊框不同方向的寬度何恶。 |
margin | Margin | 外邊距類型,用于描述組件不同方向的外邊距嚼黔。 |
padding | Padding | 內(nèi)邊距類型细层,用于描述組件不同方向的內(nèi)邊距。 |
LayoutInfo9+
子組件layout信息唬涧。
從API version 9開始疫赎,該接口支持在ArkTS卡片中使用。
參數(shù)名稱 | 參數(shù)類型 | 描述 |
---|---|---|
position | Position | 子組件位置坐標(biāo)碎节。 |
constraint | ConstraintSizeOptions | 子組件約束尺寸捧搞。 |
@Entry
@Component
struct Index {
build() {
Column() {
CustomLayout() {
ForEach([1, 2, 3], (index) => {
Text('Sub' + index)
.fontSize(30)
.borderWidth(2)
})
}
}
}
}
@Component
struct CustomLayout {
@BuilderParam builder: () => {};
onLayout(children: Array<LayoutChild>, constraint: ConstraintSizeOptions) {
let pos = 0;
children.forEach((child) => {
child.layout({ position: { x: pos, y: pos }, constraint: constraint })
pos += 100;
})
}
onMeasure(children: Array<LayoutChild>, constraint: ConstraintSizeOptions) {
let size = 100;
children.forEach((child) => {
child.measure({ minHeight: size, minWidth: size, maxWidth: size, maxHeight: size })
size += 50;
})
}
build() {
this.builder()
}
}
運(yùn)行效果如下:
總結(jié)
自定義組件的生命周期 回調(diào)函數(shù) 用于通知用戶該自定義組件的生命周期,這些回調(diào)函數(shù)是私有的,在運(yùn)行時(shí)由開發(fā)框架在特定的時(shí)間進(jìn)行調(diào)用实牡,不能從應(yīng)用程序中手動(dòng)調(diào)用這些回調(diào)函數(shù)陌僵。合理的掌握和使用組件的生命周期函數(shù)可以幫助我們更好開發(fā)和實(shí)現(xiàn)需求功能。