生命周期总结(uni-app、vue2、vue3生命周期讲解)

devtools/2025/3/6 14:07:45/

一、vue2生命周期

Vue2 的生命周期钩子函数分为 4 个阶段:创建挂载更新销毁

1. 创建阶段

  • beforeCreate:实例初始化之后,数据观测和事件配置之前。

  • created:实例创建完成,数据观测和事件配置已完成,但 DOM 未生成。

2. 挂载阶段

  • beforeMount:模板编译完成,但未挂载到 DOM。

  • mounted:实例挂载到 DOM 后调用,DOM 已生成。

3. 更新阶段

  • beforeUpdate:数据更新时调用,DOM 未重新渲染。

  • updated:数据更新后,DOM 重新渲染完成。

4. 销毁阶段

  • beforeDestroy:实例销毁之前调用,此时实例仍可用。

  • destroyed:实例销毁后调用,所有事件监听器和子实例被移除。

javascript">export default {beforeMount() {console.log('beforeMount: 模板编译完成,DOM 未挂载');},mounted() {console.log('mounted: DOM 已挂载');}
}

二、vue3生命周期

Vue3 的生命周期与 Vue2 类似,但有一些变化:

  • Vue3 使用 Composition API,生命周期钩子函数可以通过 setup 函数访问。

  • 部分钩子函数名称变化,并新增了一些钩子。

1. 创建阶段

  • setup:替代 beforeCreate 和 created,在组件初始化时调用。

  • onBeforeMount:替代 beforeMount

  • onMounted:替代 mounted

2. 更新阶段

  • onBeforeUpdate:替代 beforeUpdate

  • onUpdated:替代 updated

3. 销毁阶段

  • onBeforeUnmount:替代 beforeDestroy

  • onUnmounted:替代 destroyed

4. 新增钩子

  • onActivated:被 <keep-alive> 缓存的组件激活时调用。

  • onDeactivated:被 <keep-alive> 缓存的组件停用时调用。

  • onErrorCaptured:捕获子孙组件的错误时调用。

javascript">import { onBeforeMount, onMounted } from 'vue';export default {setup() {console.log('setup: 组件初始化');onBeforeMount(() => {console.log('onBeforeMount: DOM 未挂载');});onMounted(() => {console.log('onMounted: DOM 已挂载');});}
}

三、vue2和vue3生命周期的区别

生命周期Vue2Vue3说明
创建阶段beforeCreatesetupVue3 使用 setup 替代 beforeCreate 和 created
挂载阶段beforeMountonBeforeMount钩子函数名称变化
挂载完成mountedonMounted钩子函数名称变化
更新阶段beforeUpdateonBeforeUpdate钩子函数名称变化
更新完成updatedonUpdated钩子函数名称变化
销毁阶段beforeDestroyonBeforeUnmount钩子函数名称变化
销毁完成destroyedonUnmounted钩子函数名称变化
缓存组件激活onActivatedVue3 新增
缓存组件停用onDeactivatedVue3 新增
错误捕获onErrorCapturedVue3 新增

四、uni-app生命周期

UniApp 的生命周期分为 应用生命周期页面生命周期 和 组件生命周期

官网链接:页面 | uni-app官网

1、应用的生命周期(重点是前面几个)

  • onLaunch:应用初始化完成时触发(全局只触发一次)。

  • onShow:应用启动或从后台进入前台时触发。

  • onHide:应用从前台进入后台时触发。

  • onError:应用发生脚本错误时触发。

  • onUniNViewMessage:监听 nvue 页面发送的消息。

  • onUnhandledRejection:监听未处理的 Promise 拒绝事件。

  • onPageNotFound:页面不存在时触发。

  • onThemeChange:监听系统主题变化。

javascript">// 在 App.vue 中定义应用生命周期钩子
export default {onLaunch(options) {console.log('App Launch', options);},onShow(options) {console.log('App Show', options);},onHide() {console.log('App Hide');},onError(err) {console.error('App Error', err);}
}

2、页面的生命周期(前五个是重点)

页面生命周期是指单个页面的加载、显示、隐藏和卸载的过程。Uniapp 提供了以下页面生命周期钩子函数:

  • onLoad: 页面加载时触发,一个页面只会调用一次,参数为页面传递的参数。适合在页面加载时获取参数并初始化数据。

  • onShow: 页面显示/切入前台时触发。刷新也会触发。

  • onReady: 页面初次渲染完成时触发,一个页面只会调用一次。

  • onHide: 页面隐藏/切入后台时触发。

  • onUnload: 页面卸载时触发。

  • onPullDownRefresh: 页面下拉刷新时触发。

  • onReachBottom: 页面上拉触底时触发。

  • onPageScroll: 页面滚动时触发。

  • onResize: 页面尺寸改变时触发(如屏幕旋转)。

  • onTabItemTap: 点击 tab 时触发,参数为当前 tab 的信息。

javascript">// 在页面中定义页面生命周期钩子
export default {onLoad(options) {console.log('Page Load', options);},onShow() {console.log('Page Show');},onReady() {console.log('Page Ready');},onHide() {console.log('Page Hide');},onUnload() {console.log('Page Unload');}
}

注意:onLoad和onReady的区别

onload

  • 触发时机较晚,需要等待页面及其所有元素(包括图片、视频等)完全加载完毕后才会触发。
  • 适用于需要在页面所有资源都加载完毕后才执行的操作,如计算页面元素的大小、位置等属性。
  • 在传统的网页开发中,onload事件经常被用来确保页面资源已经加载完毕后再执行某些操作。
  • 使用场景:如果你需要确保页面上的所有元素都已经加载完毕再发起请求,比如获取某些依赖于页面内容的动态数据,那么onload是一个合适的选择。这样可以避免因为页面元素还未加载完毕而导致的请求错误或数据不准确。

onready

  • 触发时机较早,当页面DOM结构绘制完毕后就会触发。
  • 适用于需要在页面DOM结构就绪后立即执行的操作,如初始化UI组件、绑定事件监听器等。
  • 在一些现代前端框架(如Vue、React等)中,通常会有类似的生命周期钩子(如mounted)来替代传统的onready事件。
  • 使用场景:如果你需要在页面DOM结构就绪后立即发起请求,而不必等待所有资源都加载完毕,那么onready更为合适。这通常用于初始化页面上的某些功能或组件,这些功能或组件可能不依赖于页面上的所有资源。

3、组件的生命周期

UniApp 的组件生命周期与 Vue2 或 Vue3 的生命周期一致,如果使用的是vue2则使用vue2的生命周期,使用的vue3,则使用vue3生命周期。

  • Vue2beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed

  • Vue3setuponBeforeMountonMountedonBeforeUpdateonUpdatedonBeforeUnmountonUnmounted

4、为什么应用和页面生命周期都包含 onShow 和 onHide

  • 应用生命周期 的 onShow 和 onHide 是针对整个应用的,关注的是应用的整体状态(如启动、切换到前台/后台)。

  • 页面生命周期 的 onShow 和 onHide 是针对单个页面的,关注的是页面的显示和隐藏状态(如页面跳转、返回)。

5、两者生命周期的区别

特性应用生命周期 (App.vue)页面生命周期 (页面 .vue)
作用范围整个应用单个页面
触发时机应用启动、切换到前台/后台页面显示、隐藏
使用场景全局逻辑(如登录状态检查)页面逻辑(如刷新数据)

五、总结

  • Vue2 和 Vue3 的生命周期基本一致,但 Vue3 引入了 Composition API,部分钩子函数名称变化,并新增了一些钩子。

  • UniApp 的生命周期分为应用、页面和组件三部分,应用和页面的生命周期是 UniApp 特有的,组件的生命周期与 Vue 一致。

  • 在实际开发中,根据框架版本(Vue2/Vue3)和平台(UniApp)选择合适的生命周期钩子函数。

  • 发起请求的时机

    • 页面加载时:onLoad

    • 页面显示时:onShow

    • 下拉刷新时:onPullDownRefresh

    • 上拉加载更多时:onReachBottom

    • 组件创建时:created 或 mounted


http://www.ppmy.cn/devtools/165010.html

相关文章

23种设计模式之《访问者模式(Visitor)》在c#中的应用及理解

程序设计中的主要设计模式通常分为三大类&#xff0c;共23种&#xff1a; 1. 创建型模式&#xff08;Creational Patterns&#xff09; 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提供全局访问点。 工厂方法模式&#xff0…

GaussianCity:实时生成城市级数字孪生基底的技术突破

在空间智能领域,如何高效、大规模地生成高质量的3D城市模型一直是一个重大挑战。传统方法如NeRF和3D高斯溅射技术(3D-GS)在效率和规模上存在显著瓶颈。GaussianCity通过创新性的技术方案,成功突破了这些限制,为城市级数字孪生的构建提供了全新路径。 一、核心创新:突破传…

[创业之路-329]:华为铁三角实施的步骤

一、通用过程 华为铁三角实施的步骤主要包括以下几个关键阶段&#xff1a; 1、明确角色与职责 确定铁三角成员&#xff1a;组建由客户经理&#xff08;AR&#xff09;、解决方案经理&#xff08;SR&#xff09;和交付经理&#xff08;FR&#xff09;组成的铁三角团队。制定岗…

高精算法的用法及其优势

高精度问题是指当数据的位数非常大&#xff08;超出标准数据类型的范围&#xff09;时&#xff0c;如何进行计算和存储的问题。常见场景包括大整数的加、减、乘、除、取模等操作。以下是解决高精度问题的常用方法与技巧&#xff1a; 一、数据存储 数组存储 用整型数组存储&am…

深入探索 STM32 微控制器:从基础到实践

一、引言 在当今的嵌入式系统领域&#xff0c;STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景&#xff0c;成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备&#xff0c;还是在消费电子等领域&#xff0c;STM32 都展现出了强大的生命力…

Linux 命令终极指南:分类详解与实战场景

一、文件管理类 1. ls - 列出目录内容 作用&#xff1a;查看文件与目录信息。 ls -lh /var/log # 以人性化单位显示文件大小 ls -a ~/.ssh # 显示隐藏文件&#xff08;如 SSH 密钥&#xff09; ls -R /opt # 递归列出子目录内容2. cp - 文件复制…

WebRTC简介

WebRTC简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种支持浏览器之间进行实时音视频通信和数据传输的开放标准和技术。它由Google发起&#xff0c;现已成为W3C和IETF的标准。WebRTC允许开发者在不依赖第三方插件或软件的情况下&#xff0c;直接在网页…

算法日记33:14届蓝桥C++B冶炼金属(二分答案)

一、题目&#xff1a; 二、题解&#xff1a; 1、思路解析&#xff1a; 1&#xff09;首先我们可以发现题目的样例数量为&#xff08; n < 1000 n<1000 n<1000&#xff09;&#xff0c;因此我们可以考虑 O ( n ∗ l o g n ) O(n*log^n) O(n∗logn)时间复杂度的算法 …