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

一共分为四个部分

  • 应用生命周期
  • 页面生命周期
  • 组件生命周期
  • 应用页面组件执行顺序

参考博客:雷银
微信开发文档
你不知道的小程序系列之生命周期执行顺序

应用生命周期(App(Object object))

  1. onLaunch: 初始化小程序时触发,全局只触发一次。
  2. onShow: 小程序初始化完成或用户从后台切换到前台显示时触发
  3. onHide: 用户从前台切换到后台隐藏时触发。
  4. onError: 小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息。

初始化小程序:首次打开小程序。
后台: 点击左上角关闭,或者按了设备 Home 键离开微信,并没有直接销毁,而是进入后台。
前台:再次进入微信或再次打开小程序,相当于从后台进入前台。

点击查看官方文档参考

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'
})

页面生命周期(Page(Object object))

  1. onLoad:首次进入当前页面时触发,可以在 onLoad 的参数中获取打开当前页面路径中的参数,一个页面只调用一次。
  2. onShow:页面显示加载完成后,后台切到前台或重新进入页面时触发。
  3. onReady:页面首次渲染完成时触发,代表页面已经准备妥当,可以和视图层进行交互,一个页面只调用一次。
  4. onHide:从前台切到后台或进入其他页面触发。
  5. onUnload:页面卸载时触发。

页面加载顺序:加载顺序是先加载onLoad,再是onShow,最后onReady。
页面卸载:页面是堆栈的方式引入,当前页面返回上一级页面的时候,当前页面卸载。适用于返回弹窗
点击查看官方文档参考

//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))

自小程序基础库版本 2.2.3 起,组件的的生命周期也可以在 lifetimes 字段内进行声明(这是推荐的方式,其优先级最高)

  1. created:在组件实例刚刚被创建时执行。
  2. attached:在组件实例进入页面节点树时执行。
  3. ready:在组件在视图层布局完成后执行。
  4. moved:在组件实例被移动到节点树另一个位置时执行。
  5. detached:在组件实例被从页面节点树移除时执行。
  6. error:每当组件方法抛出错误时执行,待一个参数返回报错问题
    组件创建时间:看总结小程序生命周期整体执行顺序
    组件进入页面节点执行时间:看总结小程序生命周期整体执行顺序
    组件在视图层布局完成顺序:看总结小程序生命周期整体执行顺序
Component({
  lifetimes: {
    attached: function() {
      // 在组件实例进入页面节点树时执行
    },
    detached: function() {
      // 在组件实例被从页面节点树移除时执行
    },
  },
  // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
  attached: function() {
    // 在组件实例进入页面节点树时执行
  },
  detached: function() {
    // 在组件实例被从页面节点树移除时执行
  },
  // ...
})

组件所在页面的生命周期

  1. show:组件所在的页面被展示时执行。
  2. hide:组件所在的页面被隐藏时执行。
  3. resize:组件所在的页面尺寸变化时执行,返回一个参数。
Component({
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

应用页面组件执行顺序

如果一个小程序首页中,同时有一个组件,可以猜测下他们的相应生命周期的执行顺序。可以看下附件,理解下当你打开一个小程序,你设定在各个生命周期的事件是什么时候运行的,方便解决BUG。

涉及执行顺序的小程序生命周期:

以下例子中
App:

  • onLaunch
  • onShow
  • onHide

Page:

  • onLoad
  • onShow
  • onReady
  • onHide
  • onUnload

Component:

  • created
  • attached
  • ready
  • moved
  • detached
    加载顺序可以看官方的生命周期
  • 首先执行 App.onLaunch > App.onShow
  • 其次执行 Component.created > Component.attached
  • 再执行 Page.onLoad > Page.onShow
  • 最后 执行 Component.ready > Page.onReady

详细过程参考文档:你不知道的小程序系列之生命周期执行顺序

附件:

小程序启动流程

生命周期

执行顺序

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342