一次講清楚小程序所有生命周期

一共分為四個(gè)部分

  • 應(yīng)用生命周期
  • 頁(yè)面生命周期
  • 組件生命周期
  • 應(yīng)用頁(yè)面組件執(zhí)行順序

參考博客:雷銀
微信開(kāi)發(fā)文檔
你不知道的小程序系列之生命周期執(zhí)行順序

應(yīng)用生命周期(App(Object object))

  1. onLaunch: 初始化小程序時(shí)觸發(fā),全局只觸發(fā)一次。
  2. onShow: 小程序初始化完成或用戶(hù)從后臺(tái)切換到前臺(tái)顯示時(shí)觸發(fā)
  3. onHide: 用戶(hù)從前臺(tái)切換到后臺(tái)隱藏時(shí)觸發(fā)。
  4. onError: 小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息。

初始化小程序:首次打開(kāi)小程序。
后臺(tái): 點(diǎn)擊左上角關(guān)閉,或者按了設(shè)備 Home 鍵離開(kāi)微信,并沒(méi)有直接銷(xiāo)毀,而是進(jìn)入后臺(tái)。
前臺(tái):再次進(jìn)入微信或再次打開(kāi)小程序,相當(dāng)于從后臺(tái)進(jìn)入前臺(tái)。

點(diǎn)擊查看官方文檔參考

App({
  onLaunch (options) {
    // Do something initial when launch.
  },
  onShow (options) {
    // Do something when show.
  },
  onHide () {
    // Do something when hide.
  },
  onError (msg) {
    console.log(msg)
  },
  globalData: 'I am global data'
})

頁(yè)面生命周期(Page(Object object))

  1. onLoad:首次進(jìn)入當(dāng)前頁(yè)面時(shí)觸發(fā),可以在 onLoad 的參數(shù)中獲取打開(kāi)當(dāng)前頁(yè)面路徑中的參數(shù),一個(gè)頁(yè)面只調(diào)用一次。
  2. onShow:頁(yè)面顯示加載完成后,后臺(tái)切到前臺(tái)或重新進(jìn)入頁(yè)面時(shí)觸發(fā)。
  3. onReady:頁(yè)面首次渲染完成時(shí)觸發(fā),代表頁(yè)面已經(jīng)準(zhǔn)備妥當(dāng),可以和視圖層進(jìn)行交互,一個(gè)頁(yè)面只調(diào)用一次。
  4. onHide:從前臺(tái)切到后臺(tái)或進(jìn)入其他頁(yè)面觸發(fā)。
  5. onUnload:頁(yè)面卸載時(shí)觸發(fā)。

頁(yè)面加載順序:加載順序是先加載onLoad,再是onShow,最后onReady。
頁(yè)面卸載:頁(yè)面是堆棧的方式引入,當(dāng)前頁(yè)面返回上一級(jí)頁(yè)面的時(shí)候,當(dāng)前頁(yè)面卸載。適用于返回彈窗
點(diǎn)擊查看官方文檔參考

//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onShow: function() {
    // Do something when page show.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  }
})

組件生命周期(Component(Object object))

自小程序基礎(chǔ)庫(kù)版本 2.2.3 起,組件的的生命周期也可以在 lifetimes 字段內(nèi)進(jìn)行聲明(這是推薦的方式,其優(yōu)先級(jí)最高)

  1. created:在組件實(shí)例剛剛被創(chuàng)建時(shí)執(zhí)行。
  2. attached:在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行。
  3. ready:在組件在視圖層布局完成后執(zhí)行。
  4. moved:在組件實(shí)例被移動(dòng)到節(jié)點(diǎn)樹(shù)另一個(gè)位置時(shí)執(zhí)行。
  5. detached:在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行。
  6. error:每當(dāng)組件方法拋出錯(cuò)誤時(shí)執(zhí)行,待一個(gè)參數(shù)返回報(bào)錯(cuò)問(wèn)題
    組件創(chuàng)建時(shí)間:看總結(jié)小程序生命周期整體執(zhí)行順序
    組件進(jìn)入頁(yè)面節(jié)點(diǎn)執(zhí)行時(shí)間:看總結(jié)小程序生命周期整體執(zhí)行順序
    組件在視圖層布局完成順序:看總結(jié)小程序生命周期整體執(zhí)行順序
Component({
  lifetimes: {
    attached: function() {
      // 在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行
    },
    detached: function() {
      // 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行
    },
  },
  // 以下是舊式的定義方式,可以保持對(duì) <2.2.3 版本基礎(chǔ)庫(kù)的兼容
  attached: function() {
    // 在組件實(shí)例進(jìn)入頁(yè)面節(jié)點(diǎn)樹(shù)時(shí)執(zhí)行
  },
  detached: function() {
    // 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行
  },
  // ...
})

組件所在頁(yè)面的生命周期

  1. show:組件所在的頁(yè)面被展示時(shí)執(zhí)行。
  2. hide:組件所在的頁(yè)面被隱藏時(shí)執(zhí)行。
  3. resize:組件所在的頁(yè)面尺寸變化時(shí)執(zhí)行,返回一個(gè)參數(shù)。
Component({
  pageLifetimes: {
    show: function() {
      // 頁(yè)面被展示
    },
    hide: function() {
      // 頁(yè)面被隱藏
    },
    resize: function(size) {
      // 頁(yè)面尺寸變化
    }
  }
})

應(yīng)用頁(yè)面組件執(zhí)行順序

如果一個(gè)小程序首頁(yè)中,同時(shí)有一個(gè)組件,可以猜測(cè)下他們的相應(yīng)生命周期的執(zhí)行順序。可以看下附件,理解下當(dāng)你打開(kāi)一個(gè)小程序,你設(shè)定在各個(gè)生命周期的事件是什么時(shí)候運(yùn)行的,方便解決BUG。

涉及執(zhí)行順序的小程序生命周期:

以下例子中
App:

  • onLaunch
  • onShow
  • onHide

Page:

  • onLoad
  • onShow
  • onReady
  • onHide
  • onUnload

Component:

  • created
  • attached
  • ready
  • moved
  • detached
    加載順序可以看官方的生命周期
  • 首先執(zhí)行 App.onLaunch > App.onShow
  • 其次執(zhí)行 Component.created > Component.attached
  • 再執(zhí)行 Page.onLoad > Page.onShow
  • 最后 執(zhí)行 Component.ready > Page.onReady

詳細(xì)過(guò)程參考文檔:你不知道的小程序系列之生命周期執(zhí)行順序

附件:

小程序啟動(dòng)流程

生命周期

執(zhí)行順序

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容