uni-app 生命周期詳解

概述

uni-app 基于 Vue.js 框架開發,其生命周期包含了三個層面:

  • 應用生命周期:App.vue 的生命周期
  • 頁面生命周期:各個頁面的生命周期
  • Vue 組件生命周期:Vue.js 原生的組件生命周期

這三種生命周期在不同場景下會按特定順序執行,理解它們的執行時機對于開發高質量的 uni-app 應用至關重要。


一、應用生命周期(App.vue)

應用生命周期在 App.vue 中定義,用于監聽應用的啟動、顯示、隱藏等狀態。

1.1 生命周期函數

函數名說明平臺支持
onLaunch當uni-app 初始化完成時觸發(全局只觸發一次)全平臺
onShow當uni-app 啟動,或從后臺進入前臺顯示全平臺
onHide當uni-app 從前臺進入后臺全平臺
onError當uni-app 報錯時觸發全平臺
onUniNViewMessage對nvue頁面發送的數據進行監聽App
onUnhandledRejection對未處理的 Promise 拒絕事件監聽函數App
onPageNotFound頁面不存在監聽函數全平臺
onThemeChange監聽系統主題變化全平臺

1.2 示例代碼

// App.vue
<script>
export default {onLaunch: function(options) {console.log('App Launch', options);// 應用初始化完成// 可以在這里進行全局初始化操作},onShow: function(options) {console.log('App Show', options);// 應用從后臺進入前臺// 可以在這里刷新數據、重新建立連接等},onHide: function() {console.log('App Hide');// 應用從前臺進入后臺// 可以在這里保存數據、斷開連接等},onError: function(err) {console.log('App Error:', err);// 應用發生錯誤// 可以在這里進行錯誤上報}
}
</script>

二、頁面生命周期

頁面生命周期在各個頁面的 .vue 文件中定義,用于監聽頁面的加載、顯示、隱藏等狀態。

2.1 生命周期函數

函數名說明平臺支持
onInit監聽頁面初始化百度小程序
onLoad監聽頁面加載,其參數為上個頁面傳遞的數據全平臺
onShow監聽頁面顯示。頁面每次出現在屏幕上都觸發全平臺
onReady監聽頁面初次渲染完成全平臺
onHide監聽頁面隱藏全平臺
onUnload監聽頁面卸載全平臺
onResize監聽窗口尺寸變化App、微信小程序
onPullDownRefresh監聽用戶下拉動作全平臺
onReachBottom頁面滾動到底部的事件全平臺
onTabItemTap點擊 tab 時觸發微信小程序、支付寶小程序、百度小程序、H5、App
onShareAppMessage用戶點擊右上角分享微信小程序、百度小程序、字節跳動小程序、支付寶小程序
onPageScroll監聽頁面滾動全平臺
onNavigationBarButtonTap監聽原生標題欄按鈕點擊事件App、H5
onBackPress監聽頁面返回app、H5、支付寶小程序
onNavigationBarSearchInputChanged監聽原生標題欄搜索輸入框輸入內容變化事件App、H5
onNavigationBarSearchInputConfirmed監聽原生標題欄搜索輸入框搜索事件App、H5
onNavigationBarSearchInputClicked監聽原生標題欄搜索輸入框點擊事件App、H5
onShareTimeline監聽用戶點擊右上角轉發到朋友圈微信小程序
onAddToFavorites監聽用戶點擊右上角收藏微信小程序

2.2 示例代碼

// pages/index/index.vue
<script>
export default {data() {return {title: 'Hello'}},onLoad: function(options) {console.log('頁面加載', options);// 頁面加載時觸發,可以獲取上個頁面傳遞的參數},onShow: function() {console.log('頁面顯示');// 頁面顯示/切入前臺時觸發},onReady: function() {console.log('頁面初次渲染完成');// 頁面初次渲染完成時觸發},onHide: function() {console.log('頁面隱藏');// 頁面隱藏/切入后臺時觸發},onUnload: function() {console.log('頁面卸載');// 頁面卸載時觸發},onPullDownRefresh: function() {console.log('下拉刷新');// 用戶下拉刷新時觸發// 需要在頁面配置中開啟enablePullDownRefresh},onReachBottom: function() {console.log('頁面觸底');// 頁面滾動到底部時觸發}
}
</script>

三、Vue 組件生命周期

uni-app 完全支持 Vue.js 的組件生命周期,這些生命周期在組件級別工作。

3.1 生命周期函數

函數名說明觸發時機
beforeCreate實例初始化之后,數據觀測和事件配置之前組件實例剛創建
created實例創建完成后立即調用數據觀測、屬性和方法的運算、事件回調已配置
beforeMount在掛載開始之前被調用render函數首次被調用前
mounted實例被掛載后調用el被新創建的vm.$el替換后
beforeUpdate數據更新時調用虛擬DOM重新渲染和打補丁前
updated數據更新后調用虛擬DOM重新渲染和打補丁后
activatedkeep-alive組件激活時調用組件被激活
deactivatedkeep-alive組件停用時調用組件被停用
beforeDestroy實例銷毀之前調用實例仍完全可用
destroyed實例銷毀后調用所有指令解綁、事件監聽器移除、子實例銷毀

3.2 示例代碼

// 組件生命周期示例
<script>
export default {data() {return {message: 'Hello uni-app'}},beforeCreate() {console.log('beforeCreate - 實例初始化');},created() {console.log('created - 實例創建完成');// 在這里可以訪問data、computed、methods等// 但還不能訪問DOM},beforeMount() {console.log('beforeMount - 掛載前');},mounted() {console.log('mounted - 掛載完成');// 在這里可以訪問DOM// 發起網絡請求的好時機},beforeUpdate() {console.log('beforeUpdate - 更新前');},updated() {console.log('updated - 更新完成');},beforeDestroy() {console.log('beforeDestroy - 銷毀前');// 清理工作:清除定時器、取消網絡請求等},destroyed() {console.log('destroyed - 銷毀完成');}
}
</script>

四、生命周期執行順序

理解不同生命周期的執行順序對于正確處理業務邏輯非常重要。

4.1 應用啟動時的執行順序

1. App.onLaunch         (應用啟動)
2. App.onShow           (應用顯示)
3. beforeCreate         (頁面組件創建前)
4. created              (頁面組件創建完成)
5. onLoad               (頁面加載)
6. onShow               (頁面顯示)
7. beforeMount          (頁面掛載前)
8. mounted              (頁面掛載完成)
9. onReady              (頁面初次渲染完成)

4.2 頁面跳轉時的執行順序

從頁面A跳轉到頁面B:

頁面A:
1. onHide               (頁面A隱藏)頁面B:
2. beforeCreate         (頁面B創建前)
3. created              (頁面B創建完成)
4. onLoad               (頁面B加載)
5. onShow               (頁面B顯示)
6. beforeMount          (頁面B掛載前)
7. mounted              (頁面B掛載完成)
8. onReady              (頁面B初次渲染完成)

4.3 頁面返回時的執行順序

從頁面B返回到頁面A:

頁面B:
1. onUnload             (頁面B卸載)
2. beforeDestroy        (頁面B銷毀前)
3. destroyed            (頁面B銷毀完成)頁面A:
4. onShow               (頁面A重新顯示)

4.4 應用進入后臺/前臺時的執行順序

應用進入后臺:

1. 當前頁面.onHide      (當前頁面隱藏)
2. App.onHide           (應用進入后臺)

應用從后臺回到前臺:

1. App.onShow           (應用回到前臺)
2. 當前頁面.onShow      (當前頁面顯示)

五、最佳實踐

5.1 各生命周期的使用場景

App.vue 生命周期
  • onLaunch: 全局初始化、用戶登錄狀態檢查、配置初始化
  • onShow: 應用從后臺回到前臺時的數據刷新
  • onHide: 數據保存、連接斷開
頁面生命周期
  • onLoad: 接收頁面參數、初始化頁面數據
  • onShow: 頁面數據刷新(每次顯示都會執行)
  • onReady: 獲取頁面元素、設置頁面初始狀態
  • onHide: 暫停定時器、保存用戶輸入
  • onUnload: 清理資源、取消網絡請求
Vue 組件生命周期
  • created: 數據初始化、事件監聽器設置
  • mounted: DOM操作、網絡請求、第三方插件初始化
  • beforeDestroy: 清理定時器、事件監聽器、取消網絡請求

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MCU外設初始化:為什么參數配置必須優先于使能

在微控制器領域&#xff0c;初始化參數配置階段至關重要。此時&#xff0c;雖無電源驅動&#xff0c;但微控制器在使能信號到來前&#xff0c;借初始化參數配置這一精細步驟&#xff0c;開啟關鍵準備進程。初始化參數配置如同物理坐標錨定、邏輯指令部署、內在秩序預設&#xf…

AI一周事件(2025年8月6日-8月12日)

&#xff08;以下借助 DeepSeek-R1 & ChatGPT-5 輔助整理&#xff09; 一、AI 模型與算法進展 1. OpenAI 正式發布 GPT-5&#xff08;8月7日&#xff09; 事件&#xff1a;OpenAI 于 2025 年 8 月 7 日推出 GPT-5——其自稱擁有“PhD 級別”的智能&#xff0c;通過內置…

快速了解自然語言處理

在這個智能時代&#xff0c;我們每天都在和機器 “對話”—— 用語音助手查詢天氣、讓翻譯軟件跨越語言障礙、靠智能客服解決問題…… 這些便捷體驗的背后&#xff0c;都離不開自然語言處理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; 技術。作為人工…

洛谷 P2607 [ZJOI2008] 騎士-提高+/省選-

題目描述 Z 國的騎士團是一個很有勢力的組織&#xff0c;幫會中匯聚了來自各地的精英。他們劫富濟貧&#xff0c;懲惡揚善&#xff0c;受到社會各界的贊揚。 最近發生了一件可怕的事情&#xff0c;邪惡的 Y 國發動了一場針對 Z 國的侵略戰爭。戰火綿延五百里&#xff0c;在和平…

不止于GET:掌握POST報錯注入的精髓

文章目錄引言POST請求簡述報錯注入核心思想關鍵前提實戰演練POST報錯注入與GET報錯注入的區別防御之道&#xff1a;如何避免POST報錯注入&#xff1f;引言 SQL注入是Web安全領域危害性最大、最常見、最持久的高危漏洞之一。它直接威脅到應用程序核心數據庫的安全&#xff0c;可…

01數據結構-Prim算法

01數據結構-Prim算法1.普利姆(Prim)算法1.1Prim算法定義1.2Prim算法邏輯1.3Prim代碼分析2.Prim算法代碼實現1.普利姆(Prim)算法 1.1Prim算法定義 Prim算法在找最小生成樹的時候&#xff0c;將頂點分為兩類&#xff0c;一類是在查找的過程中已經包含在生成樹中的頂點(假設為A類…

CacheBlend:結合緩存知識融合的快速RAG大語言模型推理服務

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" CacheBlend&#xff1a;結合緩存知識融合的快速RAG大語言模型推理服務 摘要 大語言模型&#xff08;LLMs&#xff09;通常在輸入中包含多個文本片段&#xff0c;以提供必要的上下文。為了加速對較長LLM輸入的預…

Docker 在 Linux 中的額外資源占用分析

Docker 本身作為一個運行時環境&#xff0c;除了容器應用本身消耗的資源外&#xff0c;還會引入一些額外的開銷。主要體現在以下幾個方面&#xff1a; 1. 存儲空間占用 (Disk Space) 這是最顯著的額外開銷&#xff0c;主要來源于 Docker 的存儲驅動&#xff08;如 overlay2&…

[激光原理與應用-264]:理論 - 幾何光學 - 什么是焦距,長焦與短焦的比較

長焦與短焦透鏡是光學系統中兩類核心組件&#xff0c;其成像特性在焦距、視角、景深、像場特性及典型應用中存在顯著差異。以下從多個維度進行詳細對比&#xff1a;一、核心參數對比參數長焦透鏡短焦透鏡焦距范圍通常 >50mm&#xff08;全畫幅相機標準&#xff09;通常 <…

el-input 復制大量數據導致頁面卡頓問題解決

問題根源 復制粘貼操作會瞬間觸發大量 input 事件&#xff0c;導致 Vue 頻繁更新響應式數據&#xff0c;引發性能瓶頸。 解決方案&#xff1a;使用 .lazy 修飾符 <el-input v-model.lazy"inputValue" />

PCIe Electrical Idle Sequences ( EIOS and EIEOS )

前言 PCI Express (PCIe)協議中&#xff0c;EIOS (Electrical Idle Ordered Set) 和 EIEOS (Electrical Idle Exit Ordered Set) 是在高速鏈路管理和狀態切換過程中極為重要的特殊序列。下面做詳細解釋&#xff1a; 一、EIOS&#xff08;Electrical Idle Ordered Set&#xff0…

【GPT入門】第45課 無梯子,linux/win下載huggingface模型方法

【GPT入門】第45課 無梯子&#xff0c;下載huggingface模型方法1.下載模型代碼2. linux 設置鏡像與加速3.windows1.下載模型代碼 from transformers import AutoModelForCausalLM, BertTokenizer, BertForSequenceClassificationmodel_dir /root/autodl-tmp/model_hf# 加載模…

計算機網絡摘星題庫800題筆記 第5章 傳輸層

第5章 傳輸層5.1 傳輸層概述題組闖關1.Internet 傳輸層滑動窗口協議規定 ( )。 A. 網絡接收分組的最低效率&#xff0c;只需要重傳未被確認的分組 B. 固定的窗口大小&#xff0c;只需要重傳未被確認的分組 C. 網絡接收分組的最低效率&#xff0c;固定的窗口大小 D. 未被確認的分…

Apache虛擬主機三種配置實戰

一、虛擬主機概述 目的&#xff1a;實現單臺服務器部署多個獨立站點 三種部署方式&#xff1a; 相同IP 不同端口不同IP 相同端口相同IP和端口 不同域名&#xff08;FQDN&#xff09; 示例目標&#xff1a;在服務器上部署 baidu 和 taobao 兩個站點方式1&#xff1a;相同IP …

【SpringBoot】04 基礎入門 - 自動配置原理入門:依賴管理 + 自動配置

文章目錄前言一、Spring Boot Maven項目POM文件解析1. 基礎項目信息2. 父項目繼承3. 依賴管理4. 構建配置5. 屬性配置Spring Boot特性體現典型Spring Boot項目特點二、依賴管理1、父項目做依賴管理無需關注版本號&#xff0c;自動版本仲裁修改自動仲裁的版本官網文檔2、依賴項引…

機器學習—— TF-IDF文本特征提取評估權重 + Jieba 庫進行分詞(以《紅樓夢》為例)

使用 Jieba 庫進行 TF-IDF 關鍵詞提取&#xff08;以《紅樓夢》為例&#xff09;在中文文本分析中&#xff0c;TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09; 是最常用的關鍵詞提取方法之一。它通過評估詞在單個文檔中的出現頻率和在所有文檔中的…

Kotlin語法整理

Kotlin語法整理 Kotlin語法整理 一、基本數據類型 共8種 二、變量的聲明三、條件 1. if…else if…else語句2. when 語句 四、循環 1. while 語句2. do…while 語句3. for 語句4. repeat 語句5. break 語句6. continue 語句 五、數組 1. 創建元素未初始化的數組2. 創建元素初始…

跨平臺低延遲的RTMP推流播放在無紙化會議與智慧教室的技術設計和架構實踐

?? 引言&#xff1a;讓每一塊屏幕“同頻”的核心技術 無紙化會議與智慧教室&#xff0c;正在從“輔助工具”走向“核心基礎設施”&#xff0c;成為政企數字化與教育信息化建設的標配。它們的核心訴求并不只是替代紙質文檔或黑板&#xff0c;而是要在多終端、多地點、多網絡環…

最優擴展大型語言模型測試時計算量可能比擴展模型參數更有效

摘要 通過增加測試時計算量使大型語言模型&#xff08;LLMs&#xff09;提升輸出效果&#xff0c;是構建能基于開放自然語言自主改進的通用智能體的重要步驟。本文研究LLMs推理階段計算量的擴展規律&#xff0c;重點回答以下問題&#xff1a;若允許LLM使用固定但可觀的推理階段…

GPT5評測對比與使用

經過長達一年的技術迭代&#xff0c;OpenAI正式推出GPT-5系列模型&#xff0c;包含GPT-5&#xff08;標準版&#xff09;、GPT-5-mini&#xff08;輕量版&#xff09;和GPT-5-nano&#xff08;極簡版&#xff09;三個版本&#xff0c;定價策略保持統一。本次升級在性能、效率與…