uni-app生命周期小测
标签: js uni-app
前情
uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app。
坑位
最近在开发一个需求,在组件中使用了onload生命周期,导致一直未生效的问题。
Why
官方文挡的介绍是像下面这样说的 文挡说明链接
uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期 及 页面生命周期。
在平时开发项目中,页面和组件的写法是一模一样的,初看我以为所有组件都会有页面生命周期和vue自带的生命周期,其实不然,只能当vue组件当页面使用时,才会有页面生命周期,而且当通过导航栏的返回键返回时,页面的onHide生命周期是不会触发的,只会触发onUnload。
解决方案
在组件里使用生命周期时,使用vue自带的生命周期即可。
测试
既然踩到这坑了,那何不做个简单测试。
关键代码
// App.vue关键测试代码如下
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
// index.vue关键测试代码如下
<script>
import helloWorld from '@/components/helloWorld.vue';
export default {
components:{
helloWorld
},
data() {
return {
title: 'Hello'
}
},
onLoad() {
console.log("index onLoad");
},
onShow() {
console.log("index onShow");
},
onReady() {
console.log("index onReady");
},
onHide() {
console.log("index onHide");
},
onUnload() {
console.log("index onUnload");
},
beforeCreate() {
console.log("index beforeCreate");
},
created() {
console.log("index created");
},
beforeMount() {
console.log("index beforeMount");
},
mounted() {
console.log("index mounted");
},
beforeUpdate() {
console.log("index beforeUpdate");
},
updated() {
console.log("index updated");
},
beforeDestroy() {
console.log("index beforeDestroy");
},
destroyed() {
console.log("index destroyed");
},
methods: {
changeTitle() {
this.title += this.title;
}
}
}
</script>
// 子组件helloWorld的关键测试代码如下
<script>
export default {
data() {
return {
test: "uni-app Hello Word"
};
},
onLoad() {
console.log("hellocomp onLoad");
},
onShow() {
console.log("hellocomp onShow");
},
onReady() {
console.log("hellocomp onReady");
},
onHide() {
console.log("hellocomp onHide");
},
onUnload() {
console.log("hellocomp onUnload");
},
beforeCreate() {
console.log("hellocomp beforeCreate");
},
created() {
console.log("hellocomp created");
},
beforeMount() {
console.log("hellocomp beforeMount");
},
mounted() {
console.log("hellocomp mounted");
},
beforeUpdate() {
console.log("hellocomp beforeUpdate");
},
updated() {
console.log("hellocomp updated");
},
beforeDestroy() {
console.log("hellocomp beforeDestroy");
},
destroyed() {
console.log("hellocomp destroyed");
}
}
</script>
测试结果
h5端打印顺序:

APP端打印顺序(使用的是模拟器):

小程序(微信)端打印顺序:

结论
- 作页面使用的组件即会触发uni-app的页面生命周期,也会触发vue的生命周期
- 非页面的vue组件只会触发了属于vue的生命周期
- 个人推荐尽量使用vue引入的生命周期,一些特殊生命周期可以使用uni-app引入的(如onload会有一些参数传入,onShow和onHide也是属于uni-app的引入的页面生命周期)
uni-app生命周期小测的更多相关文章
- 微信小程序APP生命周期
小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...
- 微信小程序-APP生命周期与运行机制
QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...
- 微信APP生命周期、页面生命周期
目录 小程序的启动流程 app生命周期 页面的生命周期 页面的生命周期(图) 小程序的启动流程 我们画一个图来表示一下,整个小程序的启动流程,我们就知道了: app生命周期 执行App()函数也就是注 ...
- 14 - XML、JSON、PLIST对比和APP生命周期
XML中间的 数据表达/传输数据的语言 优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXML.HTML 缺点:传输小型数据时,特别啰嗦 size / speed = time JSON ...
- 微信小程序生命周期——小程序的生命周期及页面的生命周期。
最近在做微信小程序开发,也发现一些坑,分享一下自己踩过的坑. 生命周期是指一个小程序从创建到销毁的一系列过程. 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面. 首先来 ...
- vue生命周期小笔记
一张图谨记vue每个生命周期的获取状态 beforecreate :可以在这加个loading事件 created :在这结束loading,还做一些初始化,实现函数自执行 mounted : 在这发 ...
- vue生命周期小总结
beforeCreate:function(){} //组件实例化之前执行的函数 created:function(){} //组件实例化完毕,但是页面没有显示 beforeMount:functio ...
- iOS进阶——App生命周期
State Description Not running The app has not been launched or was running but was terminated by the ...
- ecos的app生命周期
5种变迁,安装.更新.启动.暂停.卸载,每个app都可以自行维护每种变迁 方法简单,只需要在app/$app_name目录下定义task.php文件 <?php class desktop_ta ...
- static变量生命周期小研究
A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...
随机推荐
- SQL Server – Temporal Table 时态表
前言 之前写过一篇, 但那个时候还没有开始用, 现在是要用了, 所以翻新一下呗. SQL server temporal table 学习笔记 主要参考: 官网 Temporal tables [译] ...
- Google Ads – 大杂烩
广告相互竞争, 自己打自己? About similar keywords in a Google Ads account 如果用户的搜索能匹配到广告 Campaign 中多个广告的话, 会怎么样? ...
- C++ STL stack容器——栈
stack容器 基本概念 stack是一种先进后出的数据结构,它只有一个出口,形式如下图所示.stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何地方可以存取stack的娶她 ...
- [R18][中国語翻訳]HDKのABC370赛試(ABC370)
A.Raise Both Hands \(\texttt{Diff }11\) #include<bits/stdc++.h> using namespace std; #define e ...
- Android Qcom USB Driver学习(四)
VID/PID识别USB设备 CDC-ACM驱动介绍 CDC-ACM(Communication Device Class--Abstract Control Model)驱动实现以USB设备驱动和t ...
- vue前端使用nexus配置npm私有仓库
当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...
- Solon-Boot 与 SpringBoot 的概念不同
平常我们是拿 Solon 生态与 SpringBoot 生态作比较.而非 Solon-Boot(仅是功能模块) 与 SpringBoot 生态,但这两名字太容易让人误解了. Solon-Boot So ...
- spring boot 与spring boot admin整合问题处理
1.在整合springboot admin server时,发现admin client无法注册到admin server上 查找原因后发现代码中报错:HttpMediaTypeNotAcceptab ...
- 强大的无头UI表格库:TanStack Table!Github Star达到了惊人的25K!
强大的无头UI表格库:TanStack Table!Github Star达到了惊人的25K! 在构建现代化 Web 应用时,表格和数据网格是常见的 UI 组件,特别是在处理大量数据或需要复杂交互时, ...
- 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现七
一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...