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

一、vue2生命周期

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

1. 创建阶段

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

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

2. 挂载阶段

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

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

3. 更新阶段

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

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

4. 销毁阶段

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

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

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:捕获子孙组件的错误时调用。

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:监听系统主题变化。

// 在 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 的信息。

// 在页面中定义页面生命周期钩子
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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HCIA—IP路由静态

一、概念及作用 1、概念&#xff1a;IP路由是指在IP网络中&#xff0c;数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联&#xff1a;使不同网段的设备能够相互通信&#xff0c;构建大规模的互联网络 ②优化网络拓扑&#xff1a;根据网络…

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用&#xff1f; 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…

机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】

目录 引言前期准备Step1 设计可序列化的输入输出集合【不支持多线程】Step2 设计程序框架1、抽象层【IProcess】2、父类【HAlgorithm】3、子类【HFindModelTool】 Step3 设计UI结果展示 引言 通过仿照VisionPro软件二次开发Halcon的模板匹配工具&#xff0c;便于在客户端软件中…

【Linux跬步积累】—— 线程池详解(有源代码)

文章目录 一、如何实现一个线程1、基本结构2、实现成员函数3、演示4、代码总汇Thread.hppMain.cc 二、如何封装线程池1、设计成员变量2、构造函数与析构函数3、初始化4、启动与回收5、主线程放入任务6、子线程读取任务7、终止线程池 三、测试四、线程池总代码1、ThreadPool.hpp…

【Linux】自定协议和序列化与反序列化

目录 一、序列化与反序列化概念 二、自定协议实现一个加法网络计算器 &#xff08;一&#xff09;TCP如何保证接收方的接收到数据是完整性呢&#xff1f; &#xff08;二&#xff09;自定义协议 &#xff08;三&#xff09;自定义协议的实现 1、基础类 2、序列化与反序列…

hive之LEAD 函数详解

1. 函数概述 LEAD 是 Hive 中的窗口函数&#xff0c;用于获取当前行之后指定偏移量处的行的值。常用于分析时间序列数据、计算相邻记录的差异或预测趋势。 2. 语法 LEAD(column, offset, default) OVER ([PARTITION BY partition_column] [ORDER BY order_column [ASC|DESC]…

ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯

ZYNQ-PL学习实践&#xff08;二&#xff09;按键和定时器控制LED闪烁灯&#xff09; 1 创建工程2 verilog 代码3 约束4 综合5 生成bit总结 1 创建工程 2 verilog 代码 添加key_led.v 文件&#xff0c; module key_led(input sys_clk , //系统时钟50MHzinput …

【Python爬虫】利用代理IP爬取跨境电商AI选品分析

引言 随着DeepSeek的流行&#xff0c;越来越多的用户开始尝试将AI工具融入到日常工作当中&#xff0c;借助AI的强大功能提高工作效率。最近又掀起了一波企业出海的小高潮&#xff0c;那么如果是做跨境电商业务&#xff0c;怎么将AI融入工作流中呢&#xff1f;在做跨境电商的时候…

设计一个SVF下载器之一:整体思路

CPLD或者FPGA开发工具会生成SVF文件用以通过JTAG口配置CPLD或者FPGA。这里有些基本控制JTAG状态机的指令&#xff0c;其实就是主要两条SIR和SDR分别实现对IR寄存器和DR寄存器的写。 这样我们的这个下载器的基本工作变成了解析SVF文件之后对JTAG的TAP状态机进行操作实现对IR和D…

计算机视觉算法实战——图像配准(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域简介 图像配准&#xff08;Image Registration&#xff09;是计算机视觉中的一个重要研究方向&#xff0c;旨在将两幅或多幅…

ArcGIS操作:07 绘制矢量shp面

1、点击目录 2、右侧显示目录 3、选择要存储的文件夹&#xff0c;新建shp 4、定义名称、要素类型、坐标系 5、点击开始编辑 6、点击创建要素 7、右侧选择图层、创建面 8、开始绘制&#xff0c;双击任意位置结束绘制

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…

C 语 言 --- 猜 数 字 游 戏

C 语 言 --- 猜 数 字 游 戏 代 码 全 貌 与 功 能 介 绍游 戏 效 果 展 示游 戏 代 码 详 解头 文 件 引 入菜单函数游 戏 逻 辑 函 数 gamerand 函 数 详 解逻 辑 函 数 game 主 函 数 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验…

深入探索C++17文件系统库:std::filesystem全面解析

前言 在C编程中&#xff0c;文件系统操作是许多应用程序的基础功能之一。无论是读写文件、创建目录&#xff0c;还是遍历文件系统&#xff0c;文件系统操作几乎无处不在。然而&#xff0c;在C17之前&#xff0c;标准库并没有提供一个统一、高效且易用的文件系统操作接口。开发…

C++学习之C++初识、C++对C语言增强、对C语言扩展

一.C初识 1.C简介 2.第一个C程序 //#include <iostream> //iostream 相当于 C语言下的 stdio.h i - input 输入 o -output 输出 //using namespace std; //using 使用 namespace 命名空间 std 标准 &#xff0c;理解为打开一个房间&#xff0c;房间里有我们所需…

transformer架构解析{掩码,(自)注意力机制,多头(自)注意力机制}(含代码)-3

目录 前言 掩码张量 什么是掩码张量 掩码张量的作用 生成掩码张量实现 注意力机制 学习目标 注意力计算规则 注意力和自注意力 注意力机制 注意力机制计算规则的代码实现 多头注意力机制 学习目标 什么是多头注意力机制 多头注意力计算机制的作用 多头注意力机…

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型 1.3 基于Transformer 的语言模型1.3.1 Transformer1&#xff09;注意力层&#xff08;AttentionLayer&#xff09;2&#xff09;全连接前馈层&#xff08;Fully-connected Feedforwad Layer&#xff09;3&#xff09;层正…

Beeline的使用和Hive JDBC

目录 1. 引言1.1 Hadoop1.2 HBase1.3 Hive 2. Beeline2.1 使用Beeline访问Hive2.1.1 通过beeline直接连接Hive2.1.2 先进入beeline客户端再连接Hive2.1.3 先进入beeline客户端再连接MySQL 2.2 Beeline命令 3. Hive JDBC3.1 pom.xml中依赖配置3.2 Util工具类3.3 代码3.4 结果 参…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR&#xff0c;用来进行目标检测。 单卡训练语句&#xff08;正常运行&#xff09;&#xff1a; python main.py多卡训练语句&#xff1a; 需要通过torch.distributed.launch来启动&#xff0c;一般是单节点&#xff0c;其中CUDA_VISIBLE…