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

一共分為四個(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市过椎,隨后出現(xiàn)的幾起案子室梅,更是在濱河造成了極大的恐慌,老刑警劉巖疚宇,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡鼠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡敷待,警方通過(guò)查閱死者的電腦和手機(jī)间涵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榜揖,“玉大人勾哩,你說(shuō)我怎么就攤上這事抗蠢。” “怎么了思劳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵迅矛,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我敢艰,道長(zhǎng),這世上最難降的妖魔是什么册赛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任钠导,我火速辦了婚禮,結(jié)果婚禮上森瘪,老公的妹妹穿的比我還像新娘牡属。我一直安慰自己,他們只是感情好扼睬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布逮栅。 她就那樣靜靜地躺著,像睡著了一般窗宇。 火紅的嫁衣襯著肌膚如雪措伐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天军俊,我揣著相機(jī)與錄音侥加,去河邊找鬼。 笑死粪躬,一個(gè)胖子當(dāng)著我的面吹牛担败,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镰官,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼提前,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泳唠?” 一聲冷哼從身側(cè)響起狈网,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笨腥,沒(méi)想到半個(gè)月后孙援,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扇雕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拓售,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镶奉。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡础淤,死狀恐怖崭放,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸽凶,我是刑警寧澤币砂,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玻侥,受9級(jí)特大地震影響决摧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凑兰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一掌桩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姑食,春花似錦波岛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至曹鸠,卻和暖如春煌茬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彻桃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工宣旱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叛薯。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓浑吟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耗溜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子组力,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355