【Uniapp】关于核心页面生命周期流程详解

UniApp 的页面生命周期继承自 Vue 组件生命周期,本文将解析核心页面生命周期流程,介绍对应的触发时机、作用并给出示例。

页面生命周期触发顺序

onLoad → onShow → onReady → onHide → onUnload

各个页面生命周期介绍

一、onLoad

  • 触发时机 :页面初始化加载时触发,仅执行一次,可以接收路由参数
  • 核心作用:接收路由参数、初始化数据、发起网络请求。
  • 典型场景:商品详情页根据 ID 获取商品信息。
javascript 复制代码
<script setup>
import { ref } from 'vue';
import { getCurrentInstance } from '@dcloudio/uni-app';

const { proxy } = getCurrentInstance();
const productId = ref('');
const productInfo = ref({});

// 接收路由参数
proxy.onLoad((option) => {
  productId.value = option.id;
  // 模拟网络请求
  setTimeout(() => {
    productInfo.value = {
      name: '示例商品',
      price: 99
    };
  }, 1000);
});
</script>

二、onShow

  • 触发时机:页面显示或从后台恢复时触发,可多次执行,总之每次页面显示都会触发。
  • 核心作用:刷新动态数据、启动周期性任务(如定时器)。
  • 典型场景:聊天页更新未读消息数量。
javascript 复制代码
<script setup>
import { ref, onShow } from 'vue';

const unreadCount = ref(0);
let timer = null;

onShow(() => {
  // 模拟数据刷新
  unreadCount.value = Math.floor(Math.random() * 10);
  
  // 启动定时器
  timer = setInterval(() => {
    console.log('心跳检测');
  }, 3000);
});
</script>

三、onReady

  • 触发时机:页面首次渲染完成时触发,此时组件已挂载完成,DOM 树($el)已可用。
  • 核心作用:操作 DOM 节点、初始化依赖渲染的组件(如地图、图表)。
  • 典型场景:获取自定义组件尺寸。
javascript 复制代码
<script setup>
import { ref, onReady } from 'vue';

const elementHeight = ref(0);

onReady(() => {
  uni.createSelectorQuery().select('.content').boundingClientRect((res) => {
    if (res) elementHeight.value = res.height;
  }).exec();
});
</script>

四、onHide

  • 触发时机:页面隐藏或切入后台时触发。
  • 核心作用:暂停非必要任务、保存临时状态。
  • 典型场景:视频播放页暂停播放。
javascript 复制代码
<script setup>
import { ref, onHide } from 'vue';

const videoPlayer = ref(null);

onHide(() => {
  if (videoPlayer.value) {
    videoPlayer.value.pause(); // 假设组件有暂停方法
  }
});
</script>

五、onUnload

  • 触发时机:页面卸载时触发(如关闭页面、重定向)。
  • 核心作用:清理资源、取消未完成请求,防止内存泄漏。
  • 典型场景:取消未完成的网络请求。
javascript 复制代码
<script setup>
import { ref, onUnload } from 'vue';

let abortController = null;

onUnload(() => {
  // 清除定时器
  clearInterval(timer);
  
  // 取消网络请求
  if (abortController) {
    abortController.abort();
  }
});
</script>

vue3页面和组件生命周期执行顺序 (图源自uniapp官网)

vue2页面和组件生命周期执行顺序 (图源自uniapp官网)


欢迎指正!

相关推荐
2501_915918414 小时前
iOS 26 App 性能测试|性能评测|iOS 26 性能对比:实战策略
android·macos·ios·小程序·uni-app·cocoa·iphone
用户9047066835715 小时前
uniapp Vue3版本,用pinia存储持久化插件pinia-plugin-persistedstate对微信小程序的配置
前端·uni-app
乔冠宇16 小时前
uniapp创建ts项目tsconfig.json报错的问题
uni-app
细节控菜鸡16 小时前
【2025最新】uniapp 中基于 request 封装实现多文件上传完整指南
uni-app
fakaifa16 小时前
【全开源】企业微信SCRM社群营销高级版系统+uniapp前端
uni-app·开源·企业微信·scrm·源码下载·企业微信scrm
棋子一名19 小时前
跑马灯组件 Vue2/Vue3/uni-app/微信小程序
微信小程序·小程序·uni-app·vue·js
游戏开发爱好者820 小时前
BShare HTTPS 集成与排查实战,从 SDK 接入到 iOS 真机调试(bshare https、签名、回调、抓包)
android·ios·小程序·https·uni-app·iphone·webview
2501_9160088920 小时前
iOS 26 系统流畅度实战指南|流畅体验检测|滑动顺畅对比
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106321 天前
苹果软件加固与 iOS App 混淆完整指南,IPA 文件加密、无源码混淆与代码保护实战
android·ios·小程序·https·uni-app·iphone·webview
2501_915921431 天前
iOS 26 崩溃日志解析,新版系统下崩溃获取与诊断策略
android·ios·小程序·uni-app·cocoa·iphone·策略模式