当前位置:网站首页>uni-app 从零开始-生命周期(二)
uni-app 从零开始-生命周期(二)
2022-08-04 14:31:00 【吟秋知忆】
应用生命周期
uni-app 支持如下应用生命周期函数(完整生命周期):
| 函数名 | 说明 |
|---|---|
| onLaunch | 当 uni-app 初始化完成时触发(全局只触发一次) |
| onLoad | 监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参) |
| onShow | 当 uni-app 启动,或从后台进入前台显示 |
| onHide | uni-app 从前台进入后台 |
| onError | 当 uni-app 报错时触发 |
| onUniNViewMessage | 对 nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯(opens new window) |
| onUnhandledRejection | 对未处理的 Promise 拒绝事件监听函数(2.8.1+) |
| onPageNotFound | 页面不存在监听函数 |
| onThemeChange | 监听系统主题变化 |
「注意:」
应用生命周期仅可在 App.vue 中监听,在其它页面监听无效。 应用启动参数,可以在 API uni.getLaunchOptionsSync 获取, 详见。 onlaunch 里进行页面跳转,如遇白屏报错,请参考 https://ask.dcloud.net.cn/article/35942。 App.vue 不能写模板。 onPageNotFound 页面实际上已经打开了(比如通过分享卡片、小程序码)且发现页面不存在,才会触发,api 跳转不存在的页面不会触发(如 uni.navigateTo)。
App.vue
<script setup lang="ts">
// 只能在App.vue里监听应用的生命周期
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
onLaunch(() => {
console.log('App Launch');
});
onShow(() => {
console.log('App Show');
});
onHide(() => {
console.log('App Hide');
});
</script>
页面
// 从 A 页面跳转 B 页面时传递参数 ?id=1&name=uniapp,xxx 为跳转的页面路径
//uni.navigateTo({
// url: 'xxx?id=1&name=uniapp'
//})
// 方法一:在 B 页面 <script setup> 中
<script setup>
import {
onLoad,
onShow
} from "@dcloudio/uni-app";
// onLoad 接受 A 页面传递的参数
onLoad((option) => {
console.log("B 页面 onLoad:", option); //B 页面 onLoad: {id: '1', name: 'uniapp'}
});
onShow(() => {
console.log("B 页面 onShow");
});
</script>
组件钩子函数
Vue 组件钩子函数:
| 生命周期钩子 | 描述 |
|---|---|
| beforeCreate | 在实例初始化之后被调用(全局只触发一次) |
| created | 在实例创建完成后被立即调用 |
| beforeMount | 在挂载开始之前被调用 |
| mounted | 挂载到实例上去之后调用,注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTick |
| beforeUpdate | 数据更新时调用,发生在虚拟 DOM 打补丁之前 |
| updated | 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子 |
| activated | 被 keep-alive 缓存的组件激活时调用(小程序不支持) |
| deactivated | 被 keep-alive 缓存的组件停用时调用(小程序不支持) |
| beforeDestroy | 实例销毁之前调用。在这一步,实例仍然完全可用 |
| destroyed | 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁 |
| errorCaptured | 当捕获一个来自子孙组件的错误时被调用 |
生命周期执行顺序
App.vue
<script setup lang="ts">
import { onLaunch, onShow, onHide, onError } from '@dcloudio/uni-app';
onLaunch(() => {
console.log('App Launch');
});
onShow(() => {
console.log('App Show');
});
onHide(() => {
console.log('App Hide');
});
onError((err) => {
console.log('app.onError:', err);
});
</script>
pages/index.vue
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { format } from '@/utils';
import { useCounterStore } from '@/stores/modules/counter';
import { onLoad, onShow, onReady } from '@dcloudio/uni-app';
const counter = useCounterStore();
const title = ref('Hello');
console.log('page created ');
onMounted(() => {
console.log('page onMounted');
});
onLoad(() => {
console.log('page onLoad');
});
onShow(() => {
console.log('page onShow');
});
onReady(() => {
console.log('page onReady');
});
format();
</script>

小结:应用生命周期 onLaunch----> 应用生命周期 onShow----> 各个组件的组件生命周期 beforeCreate----> 各个组件的组件生命周期 created----> 页面生命周期 onLoad----> 页面生命周期 onShow----> 所有组件的组件生命周期 mounted----> 页面生命周期 onReady
在哪个生命周期请求数据?
在 Vue 请求数据时,通常可以放在 created、beforeMount、mounted 中进行调用,此时 data 已经创建,可以将服务端端返回的数据进行赋值。(一般在created、mounted中请数据)对比如下:
created: 推荐在 created 钩子函数中调用异步请求,因为在 created 钩子函数中调用异步请求有以下优点:
能更快获取到服务端数据,减少页面 loading 时间。 ssr 不支持 beforeMount 、mounted 钩子函数,所以放在 created 中有助于一致性。
注意:created通常用于从后端 API 获取数据并将其设置为数据属性,不能做任何 DOM 操作。
mounted:
在以下情况下使用:您需要在初始渲染之前或之后立即访问或修改组件的 DOM。
console.log(element.innerHTML)
不要在以下情况下使用:您需要在初始化时为组件获取一些数据。为此,请使用 created (或为 keep-alive 组件创建 + activate ),特别是如果您在服务器端渲染期间需要该数据。
onLoad: 需要根据路由传递的参数请求数据时使用。
推荐阅读
关注我
利用空闲时间免费兼职(长期有效),请联系我(PS:关注公众号后,点击“联系我”获取联系方式)~ 
边栏推荐
- 2042. 检查句子中的数字是否递增-力扣双百代码-设置前置数据
- 【模型部署与业务落地】基于量化芯片的损失分析
- leetcode:253. 至少需要多少间会议室
- xampp安装包含的组件有(php,perl,apche,mysql)
- idea removes spark logs
- 没有Project Facets的解决方法
- 基于 Next.js实现在线Excel
- Theory 1: Deep Learning - Detailed Explanation of the LetNet Model
- 《中国综合算力指数》《中国算力白皮书》《中国存力白皮书》《中国运力白皮书》在首届算力大会上重磅发出
- Oracle 数据库用户创建、重启、导入导出
猜你喜欢
随机推荐
Rust 从入门到精通04-变量
Redis 复习计划 - Redis主从数据一致性和哨兵机制
化繁为简,聊一聊复制状态机系统架构抽象
并发程序的隐藏杀手——假共享(False Sharing)
Workaround without Project Facets
Crawler - action chain, xpath, coding platform use
基于 Next.js实现在线Excel
SQL语句的写法:Update、Case、 Select 一起的用法
[in-depth study of 4 g / 5 g / 6 g project - 50] : URLLC - 16 - the 3 GPP URLLC agreement, specification, technical principle of depth interpretation - 10 - high reliability technology - 1 - low codin
vim common operation commands
Set partition minimum difference problem (01 knapsack)
xampp安装包含的组件有(php,perl,apche,mysql)
浙江大学团队使用基于知识图谱的新方法,从空间分辨转录组数据中推断细胞间通信状况
物联网应用发展趋势
Makefile syntax and usage notes
集合划分差最小问题(01背包)
Find My Technology | Prevent your pet from getting lost, Apple Find My technology can help you
F.金玉其外矩阵(构造)
CCF GLCC officially opened | Kyushu Cloud open source experts bring generous bonuses to help universities promote open source
杭电校赛(ACM组队安排)









