組件的生命週期函數在特殊的時間點由架構觸發。組件生命週期示意圖如下:

生命週期函數具體資訊見下表:
生命週期 | 參數 | 說明 | 最低版本 |
|---|---|---|---|
onInit | 無 | 組件建立時觸發 | |
deriveDataFromProps | nextProps | 組件建立時和更新前觸發 | |
didMount | 無 | 組件建立完畢時觸發 | - |
didUpdate | (prevProps,prevData) | 組件更新完畢時觸發 | - |
didUnmount | 無 | 組件刪除時觸發 | - |
onInit、deriveDataFromProps 自基礎庫 1.14.0 才支援,可以使用 my.canIUse('component2') 做相容。
onInit
onInit在組件建立時觸發。在onInit中,可以:
訪問
this.is、this.$id、this.$page等屬性。訪問
this.data、this.props等屬性。訪問組件 methods 中的自訂屬性。
調用
this.setData、this.$spliceData修改資料。
程式碼範例一:
// /components/counter/index.js
Component({
data: {
counter: 0,
},
onInit() {
this.setData({
counter: 1,
is: this.is,
});
},
})<!-- /components/counter/index.axml -->
<view>{{counter}}</view>
<view>{{is}}</view>當組件在頁面上渲染後,頁面輸出如下:
1
/components/counter/index程式碼範例二:
// /components/counter/index.js
Component({
onInit() {
this.xxx = 2;
this.data = { counter: 0 };
},
})<!-- /components/counter/index.axml -->
<view>{{counter}}</view>當組件在頁面上渲染後,頁面輸出如下:
0deriveDataFromProps
deriveDataFromProps 在組件建立和更新時都會觸發。在deriveDataFromProps 中可以實現以下操作:
訪問
this.is、this.$id、this.$page等屬性。訪問
this.data、this.props等屬性。訪問組件 methods 中的自訂屬性。
調用
this.setData、this.$spliceData修改資料。使用
nextProps參數擷取將要更新的props參數。
// /components/counter/index.js
Component({
data: {
counter: 5,
},
deriveDataFromProps(nextProps) {
if (this.data.counter < nextProps.pCounter) {
this.setData({
counter: nextProps.pCounter,
});
}
},
})<!-- /components/counter/index.axml -->
<view>{{counter}}</view>// /pages/index/index.js
Page({
data: {
counter: 1,
},
plus() {
this.setData({ counter: this.data.counter + 1 })
},
})<!-- /pages/index/index.axml -->
<counter pCounter="{{counter}}" />
<button onTap="plus">+</button>在本樣本中,點擊 + 按鈕,頁面上的 counter 會一直保持不變,直到 pCounter 的值大於 5。
didMount
didMount 為自訂群組件首次渲染完畢後的回調,此時頁面已經渲染,通常在這時請求服務端資料。
Component({
data: {},
didMount() {
let that = this;
my.httpRequest({
url: 'http://httpbin.org/post',
success: function(res) {
console.log(res);
that.setData({name: 'xiaoming'});
}
});
},
});didUpdate
didUpdate 為自訂群組件資料更新後的回調,每次組件資料變更的時候都會調用。
Component({
data: {},
didUpdate(prevProps, prevData) {
console.log(prevProps, this.props, prevData, this.data);
},
});組件內部調用
this.setData會觸發 didUpdate。外部調用者調用
this.setData也會觸發 didUpdate。
didUnmount
didUnmount 為自訂群組件被卸載後的回調,每當組件執行個體從頁面卸載的時候都會觸發此回調。
Component({
data: {},
didUnmount() {
console.log(this);
},
});