全部產品
Search
文件中心

Mobile Platform as a Service:生命週期

更新時間:Jul 13, 2024

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

生命週期函數具體資訊見下表:

生命週期

參數

說明

最低版本

onInit

組件建立時觸發

1.14.0

deriveDataFromProps

nextProps

組件建立時和更新前觸發

1.14.0

didMount

組件建立完畢時觸發

-

didUpdate

(prevProps,prevData)

組件更新完畢時觸發

-

didUnmount

組件刪除時觸發

-

說明

onInitderiveDataFromProps 自基礎庫 1.14.0 才支援,可以使用 my.canIUse('component2') 做相容。

onInit

onInit在組件建立時觸發。在onInit中,可以:

  • 訪問 this.isthis.$idthis.$page 等屬性。

  • 訪問 this.datathis.props 等屬性。

  • 訪問組件 methods 中的自訂屬性。

  • 調用 this.setDatathis.$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>

當組件在頁面上渲染後,頁面輸出如下:

0

deriveDataFromProps

deriveDataFromProps 在組件建立和更新時都會觸發。在deriveDataFromProps 中可以實現以下操作:

  • 訪問 this.isthis.$idthis.$page 等屬性。

  • 訪問this.datathis.props 等屬性。

  • 訪問組件 methods 中的自訂屬性。

  • 調用this.setDatathis.$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);
  },
});