wangjing013 / learn-mini

小程序 Demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

page life cycle

wangjing013 opened this issue · comments

概述

在讲解页面生命周期之前, 我们先来了解几个概念:

  • 栈: 遵循 LIFO 的一种数据结构, 用来管理页面之间的关系.
  • 前台: 小程序启动后,界面被展示给用户,此时小程序处于前台状态
  • 后台: 当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有完全终止运行,而是进入了后台状态,小程序还可以运行一小段时间

当用户再次进入微信或再次打开小程序, 小程序又会从后台进入前台. 但如果用户很久没有再进入小程序, 或者系统资源紧张, 小程序可能被销毁, 即完全终止运行.

页面生命周期

  • onLoad - 页面创建时执行
  • onShow - 页面出现在前台时执行
  • onReady - 页面首次渲染完毕时执行
  • onHide - 页面从前台变为后台时执行
  • onUnload - 页面销毁时执行

上面几个函数都是经常使用的, 下面来逐一讲解:

从入栈、出栈、前台、后台的维度来理解每个生命周期函数执行时机:

  • 入栈

    • onLoad
    • onShow
    • onReady
  • 前台

    • onShow
  • 后台

    • onHide
  • 出栈

    • onUnload

下面通过具体案例来理解.

案例

假设有页面 page1page2 , 然后 page1 通过 navigateTo 进入 page2 , 然后返回 page1 退出小程序.

Page1

<template>
  <view class="container">
    Page1
  </view>
</template>
<script>
export default {
  onLoad() {
     // 页面创建时执行
     console.log("onLoad");
  },
  onShow	() {
     // 页面出现在前台时执行
     console.log("onShow");
  },
  onReady() {
      // 初次渲染完成
      console.log("onReady");
  },
  onHide() {
       // 后台
       console.log("onHide");
  },
  onUnload() {
       // 出栈
       console.log("onUnload");
  },
}
</script>

Page2

<template>
  <view class="container">
    Page2
  </view>
</template>
<script>
export default {
  onLoad() {
     // 页面创建时执行
     console.log("onLoad");
  },
  onShow	() {
     // 页面出现在前台时执行
     console.log("onShow");
  },
  onReady() {
      // 初次渲染完成
      console.log("onReady");
  },
  onHide() {
       // 后台
       console.log("onHide");
  },
  onUnload() {
       // 出栈
       console.log("onUnload");
  },
}
</script>

用户访问路径为: 进入小程序 -> Page1 -> Page2 -> Page1-> 退出小程序.

Page1 生命周期执行输出如下:

onLoad -> onShow -> onReady -> onHide -> onShow -> onUnload.

整个生命周期内 onLoadonReadyonUnload 这三个事件仅执行一次. 而 onHideonShow在每次页面隐藏和显示时都会触发.