uni-app 生命周期详解

概述

uni-app 基于 Vue.js 框架开发,其生命周期包含了三个层面:

  • 应用生命周期:App.vue 的生命周期
  • 页面生命周期:各个页面的生命周期
  • Vue 组件生命周期:Vue.js 原生的组件生命周期

这三种生命周期在不同场景下会按特定顺序执行,理解它们的执行时机对于开发高质量的 uni-app 应用至关重要。


一、应用生命周期(App.vue)

应用生命周期在 App.vue 中定义,用于监听应用的启动、显示、隐藏等状态。

1.1 生命周期函数

函数名说明平台支持
onLaunch当uni-app 初始化完成时触发(全局只触发一次)全平台
onShow当uni-app 启动,或从后台进入前台显示全平台
onHide当uni-app 从前台进入后台全平台
onError当uni-app 报错时触发全平台
onUniNViewMessage对nvue页面发送的数据进行监听App
onUnhandledRejection对未处理的 Promise 拒绝事件监听函数App
onPageNotFound页面不存在监听函数全平台
onThemeChange监听系统主题变化全平台

1.2 示例代码

// App.vue
<script>
export default {onLaunch: function(options) {console.log('App Launch', options);// 应用初始化完成// 可以在这里进行全局初始化操作},onShow: function(options) {console.log('App Show', options);// 应用从后台进入前台// 可以在这里刷新数据、重新建立连接等},onHide: function() {console.log('App Hide');// 应用从前台进入后台// 可以在这里保存数据、断开连接等},onError: function(err) {console.log('App Error:', err);// 应用发生错误// 可以在这里进行错误上报}
}
</script>

二、页面生命周期

页面生命周期在各个页面的 .vue 文件中定义,用于监听页面的加载、显示、隐藏等状态。

2.1 生命周期函数

函数名说明平台支持
onInit监听页面初始化百度小程序
onLoad监听页面加载,其参数为上个页面传递的数据全平台
onShow监听页面显示。页面每次出现在屏幕上都触发全平台
onReady监听页面初次渲染完成全平台
onHide监听页面隐藏全平台
onUnload监听页面卸载全平台
onResize监听窗口尺寸变化App、微信小程序
onPullDownRefresh监听用户下拉动作全平台
onReachBottom页面滚动到底部的事件全平台
onTabItemTap点击 tab 时触发微信小程序、支付宝小程序、百度小程序、H5、App
onShareAppMessage用户点击右上角分享微信小程序、百度小程序、字节跳动小程序、支付宝小程序
onPageScroll监听页面滚动全平台
onNavigationBarButtonTap监听原生标题栏按钮点击事件App、H5
onBackPress监听页面返回app、H5、支付宝小程序
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件App、H5
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件App、H5
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件App、H5
onShareTimeline监听用户点击右上角转发到朋友圈微信小程序
onAddToFavorites监听用户点击右上角收藏微信小程序

2.2 示例代码

// pages/index/index.vue
<script>
export default {data() {return {title: 'Hello'}},onLoad: function(options) {console.log('页面加载', options);// 页面加载时触发,可以获取上个页面传递的参数},onShow: function() {console.log('页面显示');// 页面显示/切入前台时触发},onReady: function() {console.log('页面初次渲染完成');// 页面初次渲染完成时触发},onHide: function() {console.log('页面隐藏');// 页面隐藏/切入后台时触发},onUnload: function() {console.log('页面卸载');// 页面卸载时触发},onPullDownRefresh: function() {console.log('下拉刷新');// 用户下拉刷新时触发// 需要在页面配置中开启enablePullDownRefresh},onReachBottom: function() {console.log('页面触底');// 页面滚动到底部时触发}
}
</script>

三、Vue 组件生命周期

uni-app 完全支持 Vue.js 的组件生命周期,这些生命周期在组件级别工作。

3.1 生命周期函数

函数名说明触发时机
beforeCreate实例初始化之后,数据观测和事件配置之前组件实例刚创建
created实例创建完成后立即调用数据观测、属性和方法的运算、事件回调已配置
beforeMount在挂载开始之前被调用render函数首次被调用前
mounted实例被挂载后调用el被新创建的vm.$el替换后
beforeUpdate数据更新时调用虚拟DOM重新渲染和打补丁前
updated数据更新后调用虚拟DOM重新渲染和打补丁后
activatedkeep-alive组件激活时调用组件被激活
deactivatedkeep-alive组件停用时调用组件被停用
beforeDestroy实例销毁之前调用实例仍完全可用
destroyed实例销毁后调用所有指令解绑、事件监听器移除、子实例销毁

3.2 示例代码

// 组件生命周期示例
<script>
export default {data() {return {message: 'Hello uni-app'}},beforeCreate() {console.log('beforeCreate - 实例初始化');},created() {console.log('created - 实例创建完成');// 在这里可以访问data、computed、methods等// 但还不能访问DOM},beforeMount() {console.log('beforeMount - 挂载前');},mounted() {console.log('mounted - 挂载完成');// 在这里可以访问DOM// 发起网络请求的好时机},beforeUpdate() {console.log('beforeUpdate - 更新前');},updated() {console.log('updated - 更新完成');},beforeDestroy() {console.log('beforeDestroy - 销毁前');// 清理工作:清除定时器、取消网络请求等},destroyed() {console.log('destroyed - 销毁完成');}
}
</script>

四、生命周期执行顺序

理解不同生命周期的执行顺序对于正确处理业务逻辑非常重要。

4.1 应用启动时的执行顺序

1. App.onLaunch         (应用启动)
2. App.onShow           (应用显示)
3. beforeCreate         (页面组件创建前)
4. created              (页面组件创建完成)
5. onLoad               (页面加载)
6. onShow               (页面显示)
7. beforeMount          (页面挂载前)
8. mounted              (页面挂载完成)
9. onReady              (页面初次渲染完成)

4.2 页面跳转时的执行顺序

从页面A跳转到页面B:

页面A:
1. onHide               (页面A隐藏)页面B:
2. beforeCreate         (页面B创建前)
3. created              (页面B创建完成)
4. onLoad               (页面B加载)
5. onShow               (页面B显示)
6. beforeMount          (页面B挂载前)
7. mounted              (页面B挂载完成)
8. onReady              (页面B初次渲染完成)

4.3 页面返回时的执行顺序

从页面B返回到页面A:

页面B:
1. onUnload             (页面B卸载)
2. beforeDestroy        (页面B销毁前)
3. destroyed            (页面B销毁完成)页面A:
4. onShow               (页面A重新显示)

4.4 应用进入后台/前台时的执行顺序

应用进入后台:

1. 当前页面.onHide      (当前页面隐藏)
2. App.onHide           (应用进入后台)

应用从后台回到前台:

1. App.onShow           (应用回到前台)
2. 当前页面.onShow      (当前页面显示)

五、最佳实践

5.1 各生命周期的使用场景

App.vue 生命周期
  • onLaunch: 全局初始化、用户登录状态检查、配置初始化
  • onShow: 应用从后台回到前台时的数据刷新
  • onHide: 数据保存、连接断开
页面生命周期
  • onLoad: 接收页面参数、初始化页面数据
  • onShow: 页面数据刷新(每次显示都会执行)
  • onReady: 获取页面元素、设置页面初始状态
  • onHide: 暂停定时器、保存用户输入
  • onUnload: 清理资源、取消网络请求
Vue 组件生命周期
  • created: 数据初始化、事件监听器设置
  • mounted: DOM操作、网络请求、第三方插件初始化
  • beforeDestroy: 清理定时器、事件监听器、取消网络请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918611.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCU外设初始化:为什么参数配置必须优先于使能

在微控制器领域&#xff0c;初始化参数配置阶段至关重要。此时&#xff0c;虽无电源驱动&#xff0c;但微控制器在使能信号到来前&#xff0c;借初始化参数配置这一精细步骤&#xff0c;开启关键准备进程。初始化参数配置如同物理坐标锚定、逻辑指令部署、内在秩序预设&#xf…

AI一周事件(2025年8月6日-8月12日)

&#xff08;以下借助 DeepSeek-R1 & ChatGPT-5 辅助整理&#xff09; 一、AI 模型与算法进展 1. OpenAI 正式发布 GPT-5&#xff08;8月7日&#xff09; 事件&#xff1a;OpenAI 于 2025 年 8 月 7 日推出 GPT-5——其自称拥有“PhD 级别”的智能&#xff0c;通过内置…

快速了解自然语言处理

在这个智能时代&#xff0c;我们每天都在和机器 “对话”—— 用语音助手查询天气、让翻译软件跨越语言障碍、靠智能客服解决问题…… 这些便捷体验的背后&#xff0c;都离不开自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; 技术。作为人工…

洛谷 P2607 [ZJOI2008] 骑士-提高+/省选-

题目描述 Z 国的骑士团是一个很有势力的组织&#xff0c;帮会中汇聚了来自各地的精英。他们劫富济贫&#xff0c;惩恶扬善&#xff0c;受到社会各界的赞扬。 最近发生了一件可怕的事情&#xff0c;邪恶的 Y 国发动了一场针对 Z 国的侵略战争。战火绵延五百里&#xff0c;在和平…

不止于GET:掌握POST报错注入的精髓

文章目录引言POST请求简述报错注入核心思想关键前提实战演练POST报错注入与GET报错注入的区别防御之道&#xff1a;如何避免POST报错注入&#xff1f;引言 SQL注入是Web安全领域危害性最大、最常见、最持久的高危漏洞之一。它直接威胁到应用程序核心数据库的安全&#xff0c;可…

01数据结构-Prim算法

01数据结构-Prim算法1.普利姆(Prim)算法1.1Prim算法定义1.2Prim算法逻辑1.3Prim代码分析2.Prim算法代码实现1.普利姆(Prim)算法 1.1Prim算法定义 Prim算法在找最小生成树的时候&#xff0c;将顶点分为两类&#xff0c;一类是在查找的过程中已经包含在生成树中的顶点(假设为A类…

CacheBlend:结合缓存知识融合的快速RAG大语言模型推理服务

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" CacheBlend&#xff1a;结合缓存知识融合的快速RAG大语言模型推理服务 摘要 大语言模型&#xff08;LLMs&#xff09;通常在输入中包含多个文本片段&#xff0c;以提供必要的上下文。为了加速对较长LLM输入的预…

Docker 在 Linux 中的额外资源占用分析

Docker 本身作为一个运行时环境&#xff0c;除了容器应用本身消耗的资源外&#xff0c;还会引入一些额外的开销。主要体现在以下几个方面&#xff1a; 1. 存储空间占用 (Disk Space) 这是最显著的额外开销&#xff0c;主要来源于 Docker 的存储驱动&#xff08;如 overlay2&…

[激光原理与应用-264]:理论 - 几何光学 - 什么是焦距,长焦与短焦的比较

长焦与短焦透镜是光学系统中两类核心组件&#xff0c;其成像特性在焦距、视角、景深、像场特性及典型应用中存在显著差异。以下从多个维度进行详细对比&#xff1a;一、核心参数对比参数长焦透镜短焦透镜焦距范围通常 >50mm&#xff08;全画幅相机标准&#xff09;通常 <…

el-input 复制大量数据导致页面卡顿问题解决

问题根源 复制粘贴操作会瞬间触发大量 input 事件&#xff0c;导致 Vue 频繁更新响应式数据&#xff0c;引发性能瓶颈。 解决方案&#xff1a;使用 .lazy 修饰符 <el-input v-model.lazy"inputValue" />

PCIe Electrical Idle Sequences ( EIOS and EIEOS )

前言 PCI Express (PCIe)协议中&#xff0c;EIOS (Electrical Idle Ordered Set) 和 EIEOS (Electrical Idle Exit Ordered Set) 是在高速链路管理和状态切换过程中极为重要的特殊序列。下面做详细解释&#xff1a; 一、EIOS&#xff08;Electrical Idle Ordered Set&#xff0…

【GPT入门】第45课 无梯子,linux/win下载huggingface模型方法

【GPT入门】第45课 无梯子&#xff0c;下载huggingface模型方法1.下载模型代码2. linux 设置镜像与加速3.windows1.下载模型代码 from transformers import AutoModelForCausalLM, BertTokenizer, BertForSequenceClassificationmodel_dir /root/autodl-tmp/model_hf# 加载模…

计算机网络摘星题库800题笔记 第5章 传输层

第5章 传输层5.1 传输层概述题组闯关1.Internet 传输层滑动窗口协议规定 ( )。 A. 网络接收分组的最低效率&#xff0c;只需要重传未被确认的分组 B. 固定的窗口大小&#xff0c;只需要重传未被确认的分组 C. 网络接收分组的最低效率&#xff0c;固定的窗口大小 D. 未被确认的分…

Apache虚拟主机三种配置实战

一、虚拟主机概述 目的&#xff1a;实现单台服务器部署多个独立站点 三种部署方式&#xff1a; 相同IP 不同端口不同IP 相同端口相同IP和端口 不同域名&#xff08;FQDN&#xff09; 示例目标&#xff1a;在服务器上部署 baidu 和 taobao 两个站点方式1&#xff1a;相同IP …

【SpringBoot】04 基础入门 - 自动配置原理入门:依赖管理 + 自动配置

文章目录前言一、Spring Boot Maven项目POM文件解析1. 基础项目信息2. 父项目继承3. 依赖管理4. 构建配置5. 属性配置Spring Boot特性体现典型Spring Boot项目特点二、依赖管理1、父项目做依赖管理无需关注版本号&#xff0c;自动版本仲裁修改自动仲裁的版本官网文档2、依赖项引…

机器学习—— TF-IDF文本特征提取评估权重 + Jieba 库进行分词(以《红楼梦》为例)

使用 Jieba 库进行 TF-IDF 关键词提取&#xff08;以《红楼梦》为例&#xff09;在中文文本分析中&#xff0c;TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09; 是最常用的关键词提取方法之一。它通过评估词在单个文档中的出现频率和在所有文档中的…

Kotlin语法整理

Kotlin语法整理 Kotlin语法整理 一、基本数据类型 共8种 二、变量的声明三、条件 1. if…else if…else语句2. when 语句 四、循环 1. while 语句2. do…while 语句3. for 语句4. repeat 语句5. break 语句6. continue 语句 五、数组 1. 创建元素未初始化的数组2. 创建元素初始…

跨平台低延迟的RTMP推流播放在无纸化会议与智慧教室的技术设计和架构实践

✳️ 引言&#xff1a;让每一块屏幕“同频”的核心技术 无纸化会议与智慧教室&#xff0c;正在从“辅助工具”走向“核心基础设施”&#xff0c;成为政企数字化与教育信息化建设的标配。它们的核心诉求并不只是替代纸质文档或黑板&#xff0c;而是要在多终端、多地点、多网络环…

最优扩展大型语言模型测试时计算量可能比扩展模型参数更有效

摘要 通过增加测试时计算量使大型语言模型&#xff08;LLMs&#xff09;提升输出效果&#xff0c;是构建能基于开放自然语言自主改进的通用智能体的重要步骤。本文研究LLMs推理阶段计算量的扩展规律&#xff0c;重点回答以下问题&#xff1a;若允许LLM使用固定但可观的推理阶段…

GPT5评测对比与使用

经过长达一年的技术迭代&#xff0c;OpenAI正式推出GPT-5系列模型&#xff0c;包含GPT-5&#xff08;标准版&#xff09;、GPT-5-mini&#xff08;轻量版&#xff09;和GPT-5-nano&#xff08;极简版&#xff09;三个版本&#xff0c;定价策略保持统一。本次升级在性能、效率与…