請解釋 Vue 中的生命周期鉤子,不同階段觸發的鉤子函數及其用途是什么?

vue生命周期鉤子詳解(Vue 3版本)

一、生命周期階段劃分

Vue組件的生命周期可分為四大階段,每個階段對應特定鉤子函數:

  1. 創建階段:初始化實例并準備數據
  2. 掛載階段:將虛擬DOM渲染為真實DOM
  3. 更新階段:響應數據變化并重新渲染
  4. 銷毀階段:清理資源并終止組件
二、核心鉤子函數及用途
import { ref, onMounted, onUnmounted } from 'vue';export default {setup() {const count = ref(0);// 創建階段onMounted(() => {console.log('組件已掛載,可操作DOM'); // [1,4,9](@ref)});// 更新階段watchEffect(() => {console.log('數據更新,執行副作用'); // [1,4](@ref)});// 銷毀階段onUnmounted(() => {clearInterval(count.value); // [4,9](@ref)});return { count };}
};

1. 創建階段

  • onMounted:組件掛載完成后觸發,適合初始化第三方庫、DOM操作
    onMounted(() => {const element = document.getElementById('app');element.style.color = 'red'; // [4,6](@ref)
    });
  • onBeforeMount:掛載開始前觸發,用于模板預處理(Vue 3新增)

2. 掛載階段

  • onRenderTracked:響應式依賴被追蹤時觸發(組合式API獨有)
    onRenderTracked((event) => {console.log('依賴變化:', event.key); // [1,4](@ref)
    });

3. 更新階段

  • onBeforeUpdate:數據更新但DOM未重繪前觸發
    onBeforeUpdate(() => {console.log('數據即將更新'); // [4,9](@ref)
    });
  • onUpdated:DOM更新完成后觸發
    onUpdated(() => {console.log('DOM已更新'); // [4,9](@ref)
    });

4. 銷毀階段

  • onBeforeUnmount:組件銷毀前觸發,用于清理工作
    onBeforeUnmount(() => {clearInterval(count.value); // [4,9](@ref)
    });
  • onUnmounted:組件完全銷毀后觸發
    onUnmounted(() => {console.log('組件已銷毀'); // [4,9](@ref)
    });
三、使用建議
  1. 數據請求:優先在onMounted中發起,避免阻塞渲染
    onMounted(async () => {const data = await fetchData(); // [4,9](@ref)state.value = data;
    });
  2. DOM操作:僅在onMounted/onBeforeUpdate中進行
    onMounted(() => {const element = document.getElementById('my-element');element.addEventListener('click', handleClick); // [4,6](@ref)
    });
  3. 清理邏輯:必須成對出現(添加/移除事件監聽、清除定時器)
    let timer = null;
    onMounted(() => {timer = setInterval(() => {}, 1000);
    });
    onBeforeUnmount(() => {clearInterval(timer); // [4,9](@ref)
    });
四、注意事項
  1. 避免阻塞主線程:不要在生命周期鉤子中執行復雜計算
    // 錯誤示例:onMounted中執行大數據處理
    onMounted(() => {heavyComputation(); // [4,14](@ref)
    });
  2. 正確處理異步操作:使用watchEffectwatch監聽數據變化
    watchEffect(() => {const data = await fetchData(count.value); // [1,4](@ref)state.value = data;
    });
  3. 父子組件生命周期順序
    父 beforeMount -> 子 beforeMount -> 子 mounted -> 父 mounted
    父 beforeUnmount -> 子 beforeUnmount -> 子 unmounted -> 父 unmounted
  4. 組合式API注意事項
    • onMounted等鉤子必須在setup函數內調用
    • 響應式數據需通過refreactive聲明
    // 錯誤示例:未聲明響應式數據
    setup() {onMounted(() => {console.log(nonRefData); // undefined});
    }
五、與React useEffect對比
Vue 生命周期React useEffect適用場景
onMounteduseEffect(() => {}, [])組件掛載后執行一次性操作
onBeforeUpdateuseEffect(() => {}, [data])數據更新前執行邏輯
onUnmounteduseEffect的清理函數組件銷毀前清理資源

通過合理利用生命周期鉤子,開發者可以精確控制組件的行為,提升代碼可維護性和性能。在實際開發中,建議結合組合式API的watchEffectwatch實現更細粒度的響應式處理,同時嚴格遵循"掛載前/后"、"更新前/后"的操作規范,避免常見的內存泄漏和競態條件問題。

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

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

相關文章

計算機專業知識【深入理解子網中的特殊地址:為何 192.168.0.1 和 192.168.0.255 不能隨意分配】

在計算機網絡的世界里,IP 地址是設備進行通信的關鍵標識。對于常見的子網,如 192.168.0.0/24,我們可能會疑惑為何某些地址不能分配給主機使用。接下來,我們就以 192.168.0.0/24 為例,詳細解釋為何 192.168.0.1 和 192.…

軟件架構設計:軟件工程

一、軟件工程概述 軟件工程的定義 軟件工程是應用系統化、規范化、可量化的方法開發、運行和維護軟件。 軟件工程的目標 提高軟件質量、降低開發成本、縮短開發周期。 軟件生命周期 瀑布模型:需求分析→設計→編碼→測試→維護。迭代模型:分階段迭代開…

mysql 學習15 SQL優化,插入數據優化,主鍵優化,order by優化,group by 優化,limit 優化,count 優化,update 優化

插入數據優化, insert 優化, 批量插入(一次不超過1000條) 手動提交事務 主鍵順序插入 load 從本地一次插入大批量數據, 登陸時 mysql --local-infile -u root -p load data local infile /root/sql1.log into table tb…

達夢數據庫針對慢SQL,收集統計信息清除執行計劃緩存

前言:若遇到以下場景,大概率是SQL走錯了執行計劃: 1、一條SQL在頁面上查詢特別慢,但拿到數據庫終端執行特別快 2、一條SQL在某種檢索條件下查詢特別慢,但拿到數據庫終端執行特別快 此時,可以嘗試按照下述步…

使用JWT實現微服務鑒權

目錄 一、微服務鑒權 1、思路分析 2、系統微服務簽發token 3、網關過濾器驗證token 4、測試鑒權功能 前言: 隨著微服務架構的廣泛應用,服務間的鑒權與安全通信成為系統設計的核心挑戰之一。傳統的集中式會話管理在分布式場景下面臨性能瓶頸和擴展性…

廣西壯族自治區園區投促中心黨委書記陶德文率團到訪深蘭科技

2月16日,廣西壯族自治區園區投促中心黨委書記、主任,自治區園區辦黨組成員陶德文率團來到深蘭科技集團上海總部考察調研,并與深蘭科技集團創始人、董事長陳海波等集團管理層座談交流,雙方圍繞深蘭科技人工智能項目落地廣西的相關事…

基于UnrealEngine(UE5)的太空探索

視頻部分可參見:https://www.bilibili.com/video/BV1JWA8eSEVg/ 中國 天宮號 空間站 人造衛星可視化 星鏈衛星可視化 小行星分布及運動軌跡可視化 月球基地 可視化 八大行星軌道 太陽系宜居帶可視化 阿波羅8號拍攝的地球升起 谷神星模型及軌跡可視化 星座可視化 十…

WLAN無線2.4G/5G頻段劃分和可用信道

互聯網各領域資料分享專區(不定期更新): Sheet

使用 OpenTelemetry 和 Langtrace 的 Elastic 分發跟蹤基于 RAG 的聊天機器人

作者:來自 Elastic Bahubali Shetti 如何使用 Elastic 觀察基于 OpenAI RAG 的應用程序。使用 Langtrace 對應用程序進行檢測,收集日志、跟蹤、指標,并了解 LLM 在 Kubernetes 上使用 OpenTelemetry 的 Elastic Distributions 的運行情況。 目…

基于機器學習的水文數據采集預測與可視化分析系統

【機器學習】基于機器學習的水文數據采集預測與可視化分析系統(完整系統源碼開發筆記詳細部署教程)? 目錄 一、項目簡介二、項目界面展示三、項目視頻展示 一、項目簡介 系統采用Python及Flask框架構建Web服務端,結合PyMySQL與MySQL實現數據…

三甲醫院網絡架構與安全建設實戰

一、設計目標 實現醫療業務網/衛生專網/互聯網三網隔離 滿足等保2.0三級合規要求 保障PACS影像系統低時延傳輸 實現醫療物聯網統一接入管控 二、全網拓撲架構 三、網絡分區與安全設計 IP/VLAN規劃表 核心業務配置(華為CE6865) interface 100G…

MySQL如何解決幻讀?

目錄 一、什么是幻讀? 1.1 幻讀的定義 1.2 幻讀的示例 1.3 幻讀產生的原因? 1.4?讀已提交(Read Committed) 1.4.1 確定事務等級 1.4.2 非鎖定讀取 準備 示例 結論 1.4.3 鎖定讀取 準備 示例 分析 結論 1.5?可重…

Openssl之SM2加解密命令

### 1. 生成 SM2 私鑰openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 從私鑰導出 SM2 公鑰openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公鑰加密openssl pkeyutl -encrypt \-pu…

【含文檔+PPT+源碼】基于Python的圖書推薦系統的設計與實現

課程簡介: 本課程演示的是一款基于python的圖書推薦系統的設計與實現,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Python學習者。 1.包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行…

Nginx 安裝及配置教程(Windows)【安裝】

文章目錄 一、 Nginx 下載 1. 官網下載2. 其它渠道 二、 Nginx 安裝三、 配置四、 驗證五、 其它問題 1. 常用命令2. 跨域問題 軟件 / 環境安裝及配置目錄 一、 Nginx 下載 1. 官網下載 安裝地址:https://nginx.org/en/download.html 打開瀏覽器輸入網址 htt…

Spring Boot(8)深入理解 @Autowired 注解:使用場景與實戰示例

搞個引言 在 Spring 框架的開發中,依賴注入(Dependency Injection,簡稱 DI)是它的一個核心特性,它能夠讓代碼更加模塊化、可測試,并且易于維護。而 Autowired 注解作為 Spring 實現依賴注入的關鍵工具&…

DeepSeek教unity------Dotween

1、命名法 Tweener(補間器):一種控制某個值并對其進行動畫處理的補間。 Sequence(序列):一種特殊的補間,它不直接控制某個值,而是控制其他補間并將它們作為一個組進行動畫處理。 Tw…

【JAVA實戰】JAVA實現Excel模板下載并填充模板下拉選項數據

背景 有這樣一個場景:前端下載Excel模板,進行數據導入,這個下載模板過程需要經過后端接口去數據庫查詢數據進行某些列的下拉數據填充,下拉填充的數據過程中會出現錯誤String literals in formulas can’t be bigger than 255 cha…

【深度學習】計算機視覺(CV)-目標檢測-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目標檢測

1.什么是 DETR? DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目標檢測算法,它基于 Transformer 架構,消除了 Faster R-CNN、YOLO 等方法中的 候選框(…