uni-app 页面生命周期及组件生命周期汇总(Vue2、Vue3)


文章目录

  • 一、前言🍃
  • 二、页面生命周期
  • 三、Vue2 页面及组件生命周期流程图
  • 四、Vue3 页面及组件生命周期流程图
    • 4.1 页面加载时序介绍
    • 4.2 页面加载常见问题
    • 4.3 onShow 和 onHide
    • 4.4 onInit
    • 4.5 onLoad
    • 4.6 onReachBottom
    • 4.7 onPageScroll
    • 4.8 onBackPress
    • 4.9 onTabItemTap
    • 4.10 onNavigationBarButtonTap
  • 五、组件生命周期
  • 六、总结
  • 🎀🎀🎀uni-app 跨端开发系列 🎀🎀🎀


一、前言🍃

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。

uni-app 在开发者数量、案例、跨端抹平度、扩展灵活性、性能体验、周边生态、学习成本、开发成本等8大关键指标上拥有更强的优势。
在这里插入图片描述
从下面 uni-app 功能框架图可看出, uni-app 在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。
在这里插入图片描述


🎯今日探讨主题uni-app 页面生命周期及组件生命周期汇总(Vue2、Vue3) 的问题。

二、页面生命周期

uni-app 页面除支持 Vue 组件生命周期外还支持下方页面生命周期函数,当以组合式 API 使用时,在 Vue2Vue3 中存在一定区别,请分别参考:Vue2 组合式 API 使用文档 和 Vue3 组合式 API 使用文档。

函数名说明平台差异说明最低版本
onInit监听页面初始化,其参数同 onLoad 参数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad百度小程序3.1.0+
onLoad监听页面加载,该钩子被调用时,响应式数据、计算属性、方法、侦听器、props、slots 已设置完成,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参),参考示例。
onShow监听页面显示,页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用,注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化 App、微信小程序、快手小程序
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap点击 tab 时触发,参数为Object,具体见下方注意事项微信小程序、QQ小程序、支付宝小程序、百度小程序、H5、App、快手小程序、京东小程序
onShareAppMessage用户点击右上角分享微信小程序、QQ小程序、支付宝小程序、抖音小程序、飞书小程序、快手小程序、京东小程序
onPageScroll监听页面滚动,参数为Objectnvue不支持
onNavigationBarButtonTap监听原生标题栏按钮点击事件,参数为ObjectApp、H5
onBackPress监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack;详见app、H5、支付宝小程序
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件App、H51.6.0
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。App、H51.6.0
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时才会触发)App、H51.6.0
onShareTimeline监听用户点击右上角转发到朋友圈微信小程序2.8.1+
onAddToFavorites监听用户点击右上角收藏微信小程序、QQ小程序2.8.1+

三、Vue2 页面及组件生命周期流程图

在这里插入图片描述

四、Vue3 页面及组件生命周期流程图

在这里插入图片描述

4.1 页面加载时序介绍

接下来我们介绍 onLoadonReadyonShow 的先后关系,页面加载的详细流程。

1. uni-app框架,首先根据pages.json的配置,创建页面

所以 原生导航栏最快 显示的。页面背景色也应该在这里配置。

2. 根据页面 template 里的组件,创建 dom

这里的 dom 创建仅包含第一批处理的静态 dom 。对于通过 js/uts 更新 data 然后通过 v-for再创建的列表数据,不在第一批处理。
要注意一个页面静态 dom 元素过多,会影响页面加载速度。在uni-app x Android版本上,可能会阻碍页面进入的转场动画。 因为此时,页面转场动画还没有启动。

3. 触发onLoad

此时页面还未显示,没有开始进入的转场动画,页面 dom 还不存在。

所以这里不能直接操作 dom(可以修改 data,因为vue框架会等待 dom 准备后再更新界面); 在 app-uvue 中获取当前的 activity 拿到的是老页面的 activity ,只能通过页面栈获取activity

onLoad 比较适合的操作是:接受上页的参数,联网取数据,更新 data

手机都是多核的,uni.request 或云开发联网,在子线程运行,不会干扰UI线程的入场动画,并行处理可以更快的拿到数据、渲染界面。

🚫但 onLoad 里不适合进行大量同步耗时运算,因为此时转场动画还没开始。

尤其 uni-app x 在 Android上,onLoad里的代码(除了联网和加载图片)默认是在UI线程运行的,大量同步耗时计算很容易卡住页面动画不启动。除非开发者显式指定在其他线程运行。

4. 转场动画开始

新页面开始进入的转场动画,动画默认耗时300ms,可以在路由API中调节时长。

5. 页面onReady

第2步创建 dom虚拟domdom 创建后需要经历一段时间,UI层才能完成了页面上真实元素的创建,即触发了onReady

onReady 后,页面元素就可以自由操作了,比如 ref 获取节点。同时首批界面也渲染了。

🎯注意:onReady和转场动画开始、结束之间,没有必然的先后顺序,完全取决于 dom 的数量和复杂度。

如果元素排版和渲染够快,转场动画刚开始就渲染好了;

大多情况下,转场动画走几格就看到了首批渲染内容;

如果元素排版和渲染过慢,转场动画结束都没有内容,就会造成白屏。

联网进程从 onLoad 起就在异步获取数据更新 data ,如果服务器速度够快,第二批数据也可能在转场动画结束前渲染。

6. 转场动画结束

再次强调,5和6的先后顺序不一定,取决于首批 dom 渲染的速度。

4.2 页面加载常见问题

了解了页面加载时序原理,我们就知道如何避免页面加载常见的问题:

  • 优化白屏的方法:

    • 页面 dom 太多,注意有的组件写的不好,会拖累整体页面。uni-app x 里减少 dom 数量的策略,详见
    • 联网不要在 onReady 里,那样太慢了,在 onLoad 里早点联网
    • pages.json 里配置原生导航栏和背景色
    • 有的页面 template 内容非常少,整页就是一个需要联网加载的列表,这会造成虽然首批 dom 飞快渲染了,但页面其实还是白的,联网后才能显示字和图。 此时需要在 template 里做一些简单占位组件,比如 loading 组件、骨架屏,让本地先显示一些内容。
  • 卡住动画不启动的原因:

    • 页面 dom 太多,注意有的组件写的不好,会拖累整体页面。uni-app x 里减少 dom 数量的策略。
    • onLoad 里执行了耗时的同步计算。

4.3 onShow 和 onHide

注意页面显示,是一个会重复触发的事件。

  1. a页面刚进入时,会触发a页面的 onShow

  2. 当a跳转到b页面时,a会触发 onHide ,而b会触发 onShow

  3. 但当b被关闭时,b会触发 onUnload,此时a再次显示出现,会再次触发 onShow

  4. tabbar 页面(指 pages.json 里配置的 tabbar ),不同 tab 页面互相切换时,会触发各自的 onShowonHide

4.4 onInit

🎯注意:

  • 仅百度小程序基础库 3.260 以上支持 onInit 生命周期
  • 其他版本或平台可以同时使用 onLoad 生命周期进行兼容,注意避免重复执行相同逻辑
  • 不依赖页面传参的逻辑可以直接使用 created 生命周期替代

4.5 onLoad

🎯注意:
uni-app x android 平台,如需获取 activity 实例,此时当前页面的 activity 实例并未创建完成,会获取到上一个页面的 activity 实例(首页会获取应用默认的 activity 实例)。如需获取当前页面的 activity 实例,应在 onShowonReady 生命周期中获取。

4.6 onReachBottom

可在 pages.json 里定义具体页面底部的触发距离 onReachBottomDistance

比如设为50,那么滚动页面到距离底部50px时,就会触发 onReachBottom 事件。

如使用 scroll-view 导致页面没有滚动,则触底事件不会被触发。scroll-view 滚动到底部的事件请参考 scroll-view 的文档。

4.7 onPageScroll

属性类型说明
scrollTopNumber页面在垂直方向已滚动的距离(单位px)
onPageScroll : function(e) { //nvue暂不支持滚动监听,可用bindingx代替console.log("滚动距离为:" + e.scrollTop);
},

🎯注意:

  • onPageScroll 里不要写交互复杂的 js,比如频繁修改页面。因为这个生命周期是在渲染层触发的,在 非h5 端,js 是在逻辑层执行的,两层之间通信是有损耗的。如果在滚动过程中,频发触发两层之间的数据交换,可能会造成卡顿。(uvue在app端无此限制)

  • webview 渲染时,比如 app-vue、微信小程序、H5 中,也可以使用 wxs 监听滚动,参考;在 app-nvue 中,可以使用 bindingx 监听滚动,参考。

  • 如果想实现滚动时标题栏透明渐变,在 AppH5 下,可在 pages.json 中配置 titleNView 下的 typetransparent ,参考。(uni-app x不支持)

  • 如果需要滚动吸顶固定某些元素,推荐使用 css 的粘性布局,参考插件市场。插件市场也有其他 js 实现的吸顶插件,但性能不佳,需要时可自行搜索。(uni-app x可自由在 uts 中设置固定位置)

4.8 onBackPress

属性类型说明
fromString触发返回行为的来源:‘backbutton’——左上角导航栏按钮及安卓返回键;‘navigateBack’——uni.navigateBack() 方法。支付宝小程序端不支持返回此字段
export default {onBackPress(options) {console.log('from:' + options.from)}
}

🎯注意:

  • onBackPress 上不可使用 async,会导致无法阻止默认返回。
  • iOS 端侧滑返回不会触发 onBackPress
  • 支付宝小程序只有真机可以监听到非 navigateBack 引发的返回事件(使用小程序开发工具时不会触发 onBackPress ),不可以阻止默认返回行为。

4.9 onTabItemTap

参数说明

属性类型说明
indexNumber被点击tabItem的序号,从0开始
pagePathString被点击tabItem的页面路径
textString被点击tabItem的按钮文字
onTabItemTap : function(e) {console.log(e);// e的返回格式为json对象: {"index":0,"text":"首页","pagePath":"pages/index/index"}
},

🎯注意:

  • onTabItemTap 常用于点击当前 tabitem ,滚动或刷新当前页面。如果是点击不同的 tabitem ,一定会触发页面切换。
  • 如果想在 App 端实现点击某个 tabitem 不跳转页面,不能使用 onTabItemTap,可以使用plus.nativeObj.view 放一个区块盖住原先的 tabitem,并拦截点击事件。
  • 支付宝小程序平台 onTabItemTap 表现为点击非当前 tabitem 后触发,因此不能用于实现点击返回顶部这种操作。

4.10 onNavigationBarButtonTap

参数说明

属性类型说明
indexNumber原生标题栏按钮数组的下标
onNavigationBarButtonTap : function (e) {console.log(e);// e的返回格式为json对象:{"text":"测试","index":0}
}

🎯注意:

nvue 页面 weex 编译模式支持的生命周期同 weex,具体参考:weex 生命周期介绍。

五、组件生命周期

uni-app 组件支持的生命周期,与 vue 标准组件的生命周期相同。这里没有页面级的 onLoad 等生命周期:

函数名说明平台差异说明
beforeCreate在实例初始化之前被调用。
created在实例创建完成后被立即调用。
beforeMount在挂载开始之前被调用。
mounted挂载到实例上去之后调用。详见 注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTickVue官方文档
beforeUpdate数据更新时调用,发生在虚拟 DOM 打补丁之前。详见仅H5平台支持
updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。详见仅H5平台支持
beforeDestroy实例销毁之前调用。在这一步,实例仍然完全可用。详见
destroyedVue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。详见

六、总结

一定要注意页面和组件的生命周期差异,注意 Vue2 和 Vue3 的生命周期差异。


🎀🎀🎀uni-app 跨端开发系列 🎀🎀🎀

一、uni-app 组成和跨端原理
二、uni-app 各端差异注意事项
三、uni-app 离线本地存储方案
四、uni-app UI库、框架、组件选型指南
五、uni-app 蓝牙开发
六、uni-app 导航栏开发指南
七、uni-app 原生控件层级过高无法覆盖的解决方案
八、uni-app 设置缓存过期时间
九、uni-app H5端使用注意事项
十、uni-app之web-view组件 postMessage 通信【跨端开发系列】
十一、uni-app 全面屏、刘海屏适配(iphoneX适配)及安全区设置【跨端开发系列】
十二、uni-app Android平台上架要求的隐私政策提示配置方法【跨端开发系列】
十三、uni-app 跨端开发精美开源UI框架推荐
十四、uni-app 中使用微信小程序第三方 SDK 及资源汇总
十五、uni-app 资源引用(绝对路径和相对路径)方法汇总


在这里插入图片描述

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

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

相关文章

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别,并用表格进行对比。 核心概念: 页面 (Page): 页面是微信小程序中用户可以直接交互的视图层,也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…

大数据架构演变

一、离线数仓 缺点: ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构,离线实时分开 缺点: 组件多,不方便管理很难保证数据一致数据探查困难,出现…

进程间通讯

简介: 进程间通讯方式有: 1.内存映射(mmap): 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字(socket) 5.信号机制 通过进程中kill函数,去给另一个函数发送信号&a…

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

[桌面运维]windows自动设置浅深色主题

设置自动浅色/深色主题 我看很多up主的教程过于繁琐,需要添加四个功能,并且有些还不能生效! 大多数都是教程: 自动任务栏浅色 add HKCUSOFTWAREMicrosoftWindowsCurrentVersionThemesPersonalize/v SystemUsesLightTheme /t …

LQ quarter 5th

目录 B. 开赛主题曲 C. BlueAI E. 精准难度 B. 开赛主题曲 (1)两层循环枚举所有子串。第一层子串长度,第二层子串起点 (2)判子串是否合法还要一个 for,26 * 26 * 2e5 快要超时,因此计算每个字母…

Directx12 chapter4

官方的初始化需要的组件 Initialize 初始化涉及到首次设置全局变量和类,initialize 函数必须准备管道和资产。 初始化管道。 启用调试层。创建设备。创建命令队列。创建交换链。创建渲染器目标视图 (RTV) 描述符堆。 备注 可将描述符堆视为描述符的数组。 其中…

STM32 软件I2C读写

单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

【C++】B2099 矩阵交换行

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目描述输入格式输出格式输入输出样例输入 #1输出 #1 💯题目分析💯不同解法分析我的做法实现步骤:优点:不足&#…

[微服务]redis主从集群搭建与优化

搭建主从集群 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 1. 主从集群结构 下图就是一个简单的Redis主从集群结构: 如图所示,集群中有一个master节点、两个s…

使用WebSocket 获取实时数据

回车发送数据&#xff0c;模拟服务器发送数据 效果图&#xff1a; 源码&#xff1a; <template><div><h1>WebSocket 实时数据</h1><input type"text" v-model"ipt" keyup.enter"sendMessage(ipt)"><div v-if…

Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?

如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中&#xff1f; 在使用 Element UI 的 Table 组件时&#xff0c;如果你想要禁用某一行的选中&#xff08;特别是在多选模式下&#xff09;&#xff0c;可以通过自定义行的 selectable 属性来实现。selectable …

移动端自动化测试Appium-java

一、Appium的简介 移动端的自动化测试框架 模拟人的操作进行功能自动化常用于功能测试、兼容性测试 跨平台的自动化测试 二、Appium的原理 核心是web服务器&#xff0c;接受客户端的连接&#xff0c;接收客户端的命令&#xff0c;在手机设备上执行命令&#xff0c;收集命令…

Geoserver修行记-后端调用WMS/WMTS服务无找不到图层Could not find layer

项目场景 调用geoserver地图服务WMS,找不到图层 我在进行地图服务调用的时候&#xff0c;总是提示我找不多图层 Could not find layer&#xff0c;重点是这个图层我明明是定义了&#xff0c;发布了&#xff0c;且还能够正常查看图层的wms的样式&#xff0c;但是在调用后端调用…

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中&#xff0c;AlarmManager 是一个非常重要的系统服务&#xff0c;用于设置定时任务或者周期性任务。无论是设置一个闹钟&#xff0c;还是定时进行数据同步&#xff0c;AlarmManager 都是不可或缺的工具之一。然而&#xff0c;随着 Android 系统的不断演…

玉米识别数据集,4880张图,正确识别率可达98.6%,支持yolo,coco json,pasical voc xml格式的标注,可识别玉米

玉米识别数据集&#xff0c;4880张图&#xff0c;正确识别率可达98.6%&#xff0c;支持yolo&#xff0c;coco json,pasical voc xml格式的标注&#xff0c;可识别玉米 数据集下载地址&#xff1a; yolo v11:https://download.csdn.net/download/pbymw8iwm/90230969 yolo v9:…

【UI自动化测试】selenium八种定位方式

&#x1f3e1;个人主页&#xff1a;謬熙&#xff0c;欢迎各位大佬到访❤️❤️❤️~ &#x1f472;个人简介&#xff1a;本人编程小白&#xff0c;正在学习互联网求职知识…… 如果您觉得本文对您有帮助的话&#xff0c;记得点赞&#x1f44d;、收藏⭐️、评论&#x1f4ac;&am…

【前端系列01】优化axios响应拦截器

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、axios响应拦截器&#xff1a;☀️☀️☀️2.1 为什么前端需要响应拦截器element ui的消息组件 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动之中。 这个系列可…