微信小程序 生命周期和页面的生命周期详细介绍

发布时间 - 2026-01-10 22:39:20    点击率:

微信小程序 生命周期和页面的生命周期详解:

1.小程序的生命周期——App.js

App() 必须在 app.js 中注册,且不能注册多个。所以App()方法在一个小程序中有且仅有一个。

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。先上代码:

App({
 onLaunch: function () {
   console.log('App onLaunch');

 },

 onShow:function (){
   console.log('App onShow');

 },

 onHide:function(){
   console.log('App onHide');

 },
 onError:function(){
   console.log('App onError');

 },

 getPics: function() {
   return this.globalData.picList;
 },
 globalData:{
   picList: [] // 图片列表
 },

 globalName: 'tangdekun'

});

最外层的整个{ }就是一个object 参数。

通过表格的形式看App()中的object参数说明:

属性 类型 描述 触发时机
onLaunch Function 生命周期函数–监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)。
onShow Function 生命周期函数–监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow
onHide Function 生命周期函数–监听小程序隐藏 当小程序从前台进入后台,会触发 onHide
onError Function 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
其他 Any 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问,上面的getPics就是函数, globalName是数据,这里面的函数和数据都是全局的。调用方式:在Pager中通过getApp()方法得到App对象并获得全局的数据和调用全局的函数

将原有的app.js中替换为上面的代码,首次打开小程序,可以在Log信息中看到以下Log信息,会看到onShow()方法会执行两次

  • App onLaunch
  • App onShow()
  • App onShow()

前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。

只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。

注意:

1.不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。

2.不要在 onLaunch 的时候调用 getCurrentPage(),此时 page 还没有生成。

3.通过 getApp() 获取实例之后,不要私自调用生命周期函数。

2.页面的生命周期

Page() 函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。

生命周期函数

onLoad: 页面加载
  一个页面只会调用一次。
  接收页面参数  可以获取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。

onShow: 页面显示
  每次打开页面都会调用一次。

onReady: 页面初次渲染完成
  一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。


onHide: 页面隐藏
  当navigateTo或底部tab切换时调用。

onUnload: 页面卸载
  当redirectTo或navigateBack的时候调用。

其中APP的生命周期和页面的生命周期是相互交叉的:举例:

我们有页面Test和Test1,我们在test.js,test1.js和App.js的生命周期方法中都打印log,代码如下:

test1.js

Page({
 data:{
  names:"tangdekun test1"
 },
 onLoad:function(options){
  // 生命周期函数--监听页面加载
  console.log("test1 onLoad");
 },
 onReady:function(){
  // 生命周期函数--监听页面初次渲染完成
  console.log("test1 onReady");
 },
 onShow:function(){
  // 生命周期函数--监听页面显示
  console.log("test1 onShow");
 },
 onHide:function(){
  // 生命周期函数--监听页面隐藏
   console.log("test1 onHide");
 },
 onUnload:function(){
  // 生命周期函数--监听页面卸载
   console.log("test1 onUnload");
 },
 onPullDownRefresh: function() {
  // 页面相关事件处理函数--监听用户下拉动作
   console.log("test1 onPullDownRefresh");
 },
 onReachBottom: function() {
  // 页面上拉触底事件的处理函数
   console.log("test1 onReachBottom");
 }

})

test.js

Page({
 data:{
  name:"test"
 },
 onLoad:function(options){
  // 生命周期函数--监听页面加载
  console.log("test onLoad");
 },
 onReady:function(){
  // 生命周期函数--监听页面初次渲染完成
  console.log("test onReady");
 },
 onShow:function(){
  // 生命周期函数--监听页面显示
  console.log("test onShow");
 },
 onHide:function(){
  // 生命周期函数--监听页面隐藏
   console.log("test onHide");
 },
 onUnload:function(){
  // 生命周期函数--监听页面卸载
   console.log("test onUnload");
 },
 onPullDownRefresh: function() {
  // 页面相关事件处理函数--监听用户下拉动作
   console.log("test onPullDownRefresh");
 },
 onReachBottom: function() {
  // 页面上拉触底事件的处理函数
   console.log("test onReachBottom");
 },
 onShareAppMessage: function() {
  // 用户点击右上角分享
  return {
   title: '分享页面', // 分享标题
   desc: '这是一个分享的测试', // 分享描述
   path: 'pages/waimai/waimai' // 分享路径
  }
 },
 navigateToPageB: function() {
  wx.navigateTo({
   url: '../../pages/pageB/pageB?id=3',
   success: function(res){

   },
   fail: function() {
    // fail
   },
   complete: function() {
    // complete
   }
  })
 },
 redirectToPageA : function(){
  wx.redirectTo({
   url: '../../pages/pageA/pageA?id=4',
   success: function(res){
    // success
   },
   fail: function() {
    // fail
   },
   complete: function() {
    // complete
   }
  })
 },
 switchTabToTest1:function(){
  wx.switchTab({
   url: '../../pages/test1/test1',
   success: function(res){
    // success
   },
   fail: function() {
    // fail
   },
   complete: function() {
    // complete
   }
  })
 } 

})

app.js

//app.js
App({
 onLaunch: function () {
   console.log('App onLaunch');

 },

 onShow:function (){
   console.log('App onShow1'+this.globalName);

 },

 onHide:function(){
   console.log('App onHide');

 },
 onError:function(){
   console.log('App onError');

 },

 getPics: function() {
   return this.globalData.picList;
 },
 globalData:{
   picList: [] // 图片列表
 },

 globalName: 'tangdekun'

});

我们将test页面设置为首页【在app.json中设置】,程序会自动加载test页面,调用test.js中的生命周期方法,打印Log信息如下:

然后点击菜单栏【作业中心】test1,会调用test 的onHide,test1的onLoad,onShow,onReady,打印Log信息如下:

在点击【朋友圈】test,会调用test1的onHide方法,test的onshow方法,而不会调用test的onLoad,onReady方法,log信息如下:

通过实例我们一起理解一下官方的小程序页面的生命周期:
 

View thread是我们的wxml文件,AppServiceThread就是我们js文件中研究的页面的生命周期。这里我们可以看到每个生命周期方法的调用顺序以及和Wxml之间的信息交流。大家可以简略的看一下就好。

因为页面的生命周期和页面的路由【即页面之间的跳转方式】有关,所以接下来我会向大家展示页面跳转的三种方式和各种跳转方式之下的生命周期方法的调度。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信小程序  # 生命周期  # 生命周期详解  # 生命周期实例  # 微信小程序组件生命周期的踩坑记录  # 微信小程序页面生命周期详解  # 微信小程序App生命周期详解  # 微信小程序的生命周期的详解  # 微信小程序 生命周期函数详解  # 微信小程序 生命周期详解  # 微信小程序 生命周期详解  # 微信小程序中的生命周期与生命周期函数浅析介绍  # 周期函数  # 跳转  # 只会  # 加载  # 都是  # 触底  # 还没有  # 首次  # 多个  # 才会  # 就好  # 中有  # 不要在  # 两次  # 这是一个  # 希望能  # 可以看到  # 三种  # 又会  # 看一下 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 原生JS实现图片轮播切换效果  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何破解联通资金短缺导致的基站建设难题?  MySQL查询结果复制到新表的方法(更新、插入)  如何用虚拟主机快速搭建网站?详细步骤解析  如何在服务器上三步完成建站并提升流量?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel怎么清理缓存_Laravel optimize clear命令详解  魔方云NAT建站如何实现端口转发?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  英语简历制作免费网站推荐,如何将简历翻译成英文?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  PHP 500报错的快速解决方法  javascript基本数据类型及类型检测常用方法小结  个人摄影网站制作流程,摄影爱好者都去什么网站?  高端网站建设与定制开发一站式解决方案 中企动力  如何在香港服务器上快速搭建免备案网站?  如何快速生成专业多端适配建站电话?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何彻底删除建站之星生成的Banner?  郑州企业网站制作公司,郑州招聘网站有哪些?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何快速搭建高效WAP手机网站吸引移动用户?  iOS发送验证码倒计时应用  简单实现Android文件上传  西安专业网站制作公司有哪些,陕西省建行官方网站?  ,在苏州找工作,上哪个网站比较好?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  使用Dockerfile构建java web环境  如何撰写建站申请书?关键要点有哪些?  Laravel如何处理和验证JSON类型的数据库字段  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  详解jQuery中基本的动画方法  Python进程池调度策略_任务分发说明【指导】  JS弹性运动实现方法分析  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Android okhttputils现在进度显示实例代码  nodejs redis 发布订阅机制封装实现方法及实例代码  教你用AI将一段旋律扩展成一首完整的曲子  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  JS去除重复并统计数量的实现方法  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理