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,再 ...
随机推荐
- tailwindcss 3.3.3(完成入门,需要补充每个单独样式)
归纳 修饰符堆叠 <button class="dark:md:hover:bg-fuchsia-600"> 以下为修饰符 伪类伪元素 使用方法: 在实用程序类前添加h ...
- Eclipse中Java项目的导入和导出
eclipse中项目的导出 当我们完成自己的java项目之后,我们可以将其打包发给别人,eclipse为我们提供了自动打包的功能. 之后单击finish即可.在你选择的导出位置便可以看到导出的压缩包: ...
- 面试官:GROUP BY和DISTINCT有什么区别?
在 MySQL 中,GROUP BY 和 DISTINCT 都是用来处理查询结果中的重复数据,并且在官方的描述文档中也可以看出:在大多数情况下 DISTINCT 是特殊的 GROUP BY,如下图所示 ...
- 【赵渝强老师】在MongoDB中使用MapReduce方式计算聚合
MapReduce 能够计算非常复杂的聚合逻辑,非常灵活,但是,MapReduce非常慢,不应该用于实时的数据分析中.MapReduce能够在多台Server上并行执行,每台Server只负责完成一部 ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- HTML标签 b 和 strong 的区别
<b>标签和<strong>标签都表示加粗,效果通常是一样的: <b>:义演丁真<strong>:义演丁真 类似的还有<em>和<i& ...
- mysql替换内容
UPDATE storage SET guige = REPLACE(guige, '×', 'x')
- 题解:【XR-3】核心城市
题解:[XR-3]核心城市 思路一:考虑由特例推广到一般 1.很容易想到先考虑一个关键点的情况,然后再推广到一般情况. 2.一个点肯定选距离上最平衡的那个点,即树的中心.接着在中心周围贪心的选剩下的( ...
- 题解:USACO23OPEN-Silver
题解:USACO23OPEN-Silver T1 Milk Sum 给定一个长度为 \(N\) 的序列 \(a_1,a_2,...,a_n\),现在给出 \(Q\) 次操作每次将 \(a_x\) 修改 ...
- 20240719 CVTE 笔试
岗位:嵌入式软件开发工程师(Linux方向) 题型:20 道不定项选择题,2 道编程题 1.不定项选择题 1.1 如下哪个命令可以帮助你知道 shell 的用法 (D) more help pwd m ...