4.4 vue3生命周期函數

vue3生命周期函數

生命周期鉤子名稱對比表

階段Vue 2 選項式 APIVue 3 組合式 API說明
創建前beforeCreateonBeforeCreate(已廢棄)Vue 3 中?setup()?替代
創建完成createdsetup()(替代)setup?是入口,代替?beforeCreate?和?created
掛載前beforeMountonBeforeMount()名稱一致
掛載完成mountedonMounted()名稱一致
更新前beforeUpdateonBeforeUpdate()名稱一致
更新完成updatedonUpdated()名稱一致
卸載前beforeDestroyonBeforeUnmount()名稱變更!
卸載完成destroyedonUnmounted()名稱變更!
錯誤捕獲errorCapturedonErrorCaptured()名稱一致
激活(keep-alive)activatedonActivated()名稱一致
停用(keep-alive)deactivatedonDeactivated()名稱一致
調試:依賴追蹤onRenderTracked()Vue 3 新增,開發模式專用
調試:觸發更新onRenderTriggered()Vue 3 新增,開發模式專用

?? 重要:Vue 3 中 沒有 beforeDestroydestroyed,它們被重命名為 onBeforeUnmountonUnmounted


?詳細對比與示例

1???beforeCreate?&?created?→ 被?setup()?替代

Vue 2 寫法:

export default {beforeCreate() {console.log('組件創建前');},created() {console.log('組件創建完成');this.fetchData();},methods: {fetchData() { /* ... */ }}
}

Vue 3 寫法(<script setup>):

<script setup>
import { onMounted } from 'vue';// setup() 函數體直接執行,替代 beforeCreate 和 created
console.log('組件創建完成');function fetchData() { /* ... */ }onMounted(() => {fetchData();
});
</script>

? 說明:Vue 3 的 setup() 在組件實例創建后、onBeforeMount 之前執行,等價于 Vue 2 的 beforeCreate + created


2???beforeMount?/?mounted?→?onBeforeMount?/?onMounted

Vue 2:

export default {mounted() {console.log('DOM 已掛載');this.$refs.input.focus();}
}

Vue 3:

<script setup>
import { onMounted, ref } from 'vue';const input = ref(null);onMounted(() => {console.log('DOM 已掛載');input.value.focus();
});
</script>

? 名稱一致,行為一致。


3???beforeUpdate?/?updated?→?onBeforeUpdate?/?onUpdated

Vue 2:

export default {updated() {console.log('組件已更新');}
}

Vue 3:

<script setup>
import { onUpdated } from 'vue';onUpdated(() => {console.log('組件已更新');
});
</script>

? 完全一致。


4???beforeDestroy?/?destroyed?→?onBeforeUnmount?/?onUnmounted(?? 名稱變更)

Vue 2:

export default {beforeDestroy() {this.timer && clearInterval(this.timer);window.removeEventListener('resize', this.handleResize);},destroyed() {console.log('組件已銷毀');}
}

Vue 3:

<script setup>
import { onMounted, onBeforeUnmount } from 'vue';let timer = null;onMounted(() => {timer = setInterval(() => { /* ... */ }, 1000);window.addEventListener('resize', handleResize);
});// ? 注意:是 onBeforeUnmount,不是 beforeDestroy
onBeforeUnmount(() => {if (timer) clearInterval(timer);window.removeEventListener('resize', handleResize);console.log('組件即將卸載');
});// onUnmounted 也可用
onUnmounted(() => {console.log('組件已卸載');
});
</script>

🔴 重點beforeDestroyonBeforeUnmountdestroyedonUnmounted
這是 唯一命名不一致 的地方,遷移時務必注意!


5???activated?/?deactivated?→?onActivated?/?onDeactivated

Vue 2:

export default {activated() {console.log('組件被激活');},deactivated() {console.log('組件被緩存');}
}

Vue 3:

<script setup>
import { onActivated, onDeactivated } from 'vue';onActivated(() => {console.log('組件被激活');
});onDeactivated(() => {console.log('組件被緩存');
});
</script>

? 名稱一致,行為一致。


6?? Vue 3 新增調試鉤子
import { onRenderTracked, onRenderTriggered } from 'vue';onRenderTracked((event) => {console.log('依賴被追蹤:', event);
});onRenderTriggered((event) => {console.log('更新被觸發:', event);
});

💡 僅在開發模式有效,用于調試響應式系統,Vue 2 無對應功能。


🔄 生命周期執行順序(Vue 2 vs Vue 3 完全一致)

setup()                   ← 替代 beforeCreate + created↓
onBeforeMount()           ← beforeMount↓
onMounted()               ← mounted↓
onBeforeUpdate()          ← beforeUpdate↓
onUpdated()               ← updated↓
onBeforeUnmount()         ← beforeDestroy↓
onUnmounted()             ← destroyed

? 執行順序完全相同,只是寫法和部分名稱變化。

?生命周期執行順序示例

import {onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted
} from 'vue';export default {setup() {console.log('1. setup');onBeforeMount(() => {console.log('2. onBeforeMount');});onMounted(() => {console.log('3. onMounted');});onBeforeUpdate(() => {console.log('4. onBeforeUpdate');});onUpdated(() => {console.log('5. onUpdated');});onBeforeUnmount(() => {console.log('6. onBeforeUnmount');});onUnmounted(() => {console.log('7. onUnmounted');});return {};}
};


? Vue 3 的優勢(組合式 API)

優勢說明
邏輯復用更強可在任意?.js?文件中使用生命周期鉤子,封裝可復用邏輯(如?useMouse.js
更好的 TypeScript 支持類型推導更準確
減少?this?混亂不再依賴?this,避免箭頭函數中?this?指向問題
按邏輯組織代碼不再分散在?datamethodswatch?中,而是按功能組織

🚀 遷移建議

  1. beforeDestroy?→?onBeforeUnmount
  2. destroyed?→?onUnmounted
  3. created?邏輯移到?setup()?中
  4. 所有生命周期鉤子前加?on?前綴并從?vue?導入
  5. 優先使用?<script setup>?+ 組合式 API

? 總結

對比項Vue 2Vue 3
核心變化選項式 API組合式 API(推薦)
生命周期名稱beforeDestroy,?destroyedonBeforeUnmount,?onUnmounted
入口函數createdsetup()
寫法選項對象導入函數
邏輯復用mixins(有缺陷)自定義 Hook(推薦)
調試能力一般增強(onRenderTracked?等)

💡 一句話總結
Vue 3 的生命周期“行為不變、順序不變”,只是“寫法更新、命名微調、能力增強”
掌握 onBeforeUnmountonUnmounted 的命名變化,就能輕松遷移!

以前的選項api還可以用嗎

選項式 API 在 Vue 3 中依然有效

你完全可以像 Vue 2 那樣寫代碼:

<!-- Vue 3 中完全支持的選項式 API -->
<script>
export default {name: 'MyComponent',// ? datadata() {return {count: 0,message: 'Hello Vue 3'}},// ? 生命周期鉤子(注意:名稱已更新)created() {console.log('組件創建完成');},mounted() {console.log('組件已掛載');},// ?? 注意:Vue 3 中是 beforeUnmount 和 unmountedbeforeUnmount() {console.log('組件即將卸載');},unmounted() {console.log('組件已卸載');},// ? methodsmethods: {increment() {this.count++;}},// ? computedcomputed: {doubleCount() {return this.count * 2;}},// ? watchwatch: {count(newVal, oldVal) {console.log(`count 從 ${oldVal} 變為 ${newVal}`);}}
}
</script><template><div><p>{{ message }}</p><p>Count: {{ count }}</p><p>Double: {{ doubleCount }}</p><button @click="increment">+1</button></div>
</template>

? 這段代碼在 Vue 3 中可以直接運行,無需修改。


2?? 與 Vue 2 的主要區別(僅兩處)

功能Vue 2Vue 3(選項式 API)
銷毀前鉤子beforeDestroybeforeUnmount
銷毀完成鉤子destroyedunmounted

🔴 重要:這是唯一不兼容的地方。
如果你從 Vue 2 遷移,需要將:

  • beforeDestroy?→ 改為?beforeUnmount
  • destroyed?→ 改為?unmounted

3?? Vue 3 推薦使用?<script setup>(組合式 API)

雖然選項式 API 可用,但 Vue 3 官方更推薦使用 <script setup>,因為它:

  • 更好的邏輯復用(自定義 Hook)
  • 更強的 TypeScript 支持
  • 更靈活的代碼組織(按功能而非選項分組)
  • 更接近 React Hooks 的開發體驗
<script setup>
import { ref, computed, watch, onMounted } from 'vue';const count = ref(0);
const message = ref('Hello Vue 3');const doubleCount = computed(() => count.value * 2);watch(count, (newVal) => {console.log('count 變化:', newVal);
});onMounted(() => {console.log('組件已掛載');
});function increment() {count.value++;
}
</script><template><div><p>{{ message }}</p><p>Count: {{ count }}</p><p>Double: {{ doubleCount }}</p><button @click="increment">+1</button></div>
</template>

4?? 你可以在同一個項目中混合使用

Vue 3 允許你:

  • 新組件用?<script setup>(組合式 API)
  • 老組件保留選項式 API
  • 甚至在一個組件中混合使用(不推薦)
<script setup>
import { ref } from 'vue';const setupCount = ref(0);
</script><script>
export default {data() {return {optionsCount: 0}},methods: {incrementOptions() {this.optionsCount++;}}
}
</script>

? 這是合法的,但不建議混合使用,會造成代碼混亂。


5?? 官方態度

  • Vue 團隊明確表示:選項式 API 不會廢棄
  • 它仍然是 Vue 3 的一等公民
  • 適合:
    • 簡單組件
    • 初學者
    • 從 Vue 2 遷移的項目

? 總結

問題回答
Vue 2 的選項式 API 在 Vue 3 中還能用嗎???能用!完全支持
是否需要修改?

?? 只需將?beforeDestroy?→?beforeUnmount

destroyed?→?unmounted

是否推薦使用?

👍 適合簡單場景、遷移項目、初學者

但官方更推薦?<script setup>

會不會被廢棄???不會,Vue 團隊承諾長期支持

💡 建議

  • 新項目:優先學習和使用?<script setup>(組合式 API)
  • 老項目遷移:可以先保留選項式 API,逐步重構
  • 團隊協作:統一風格,避免混合使用

所以,放心使用!Vue 3 對選項式 API 的支持非常友好,你有充分的時間去學習和過渡到組合式 API。

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

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

相關文章

無腦整合springboot2.7+nacos2.2.3+dubbo3.2.9實現遠程調用及配置中心

簡介&#xff1a; 好久沒有寫博客了&#xff0c;最近辭職了有時間進行一次分享&#xff0c;今天我們主要是使用單體服務springboot整合nacos實現配置中心&#xff0c;然后整合dubbo來實現遠程的rpc調用。如下是本地案例架構圖&#xff0c;生產者和消費者的配置在nacos配置中心上…

騰訊位置商業授權微信小程序逆地址解析(坐標位置描述)

微信小程序JavaScript SDK 開發指南 逆地址解析(坐標位置描述) reverseGeocoder(options:Object) 本接口提供由坐標到坐標所在位置的文字描述的轉換&#xff0c;輸入坐標返回地理位置信息和附近poi列表。 注&#xff1a;坐標系采用gcj02坐標系 options屬性說明 屬性類型必填…

3D商品展示:技術狂歡下的普及困局

當微軟推出Copilot 3D——僅需一張照片即可生成可編輯的3D模型時&#xff0c;業界曾歡呼“建模門檻徹底消失”。然而技術的美好愿景卻撞上現實的銅墻鐵壁&#xff1a;當前電商平臺3D商品加載卡頓導致用戶跳出率超60%&#xff0c;企業3D化滲透率仍不足34%。絢爛的技術煙花下&…

(Arxiv-2025)Stand-In:一種輕量化、即插即用的身份控制方法用于視頻生成

Stand-In&#xff1a;一種輕量化、即插即用的身份控制方法用于視頻生成 paper是WeChat發布在Arxiv 2025的工作 paper title:Stand-In: A Lightweight and Plug-and-Play Identity Control for Video Generation Code&#xff1a;鏈接 圖1&#xff1a;給定一張參考圖像&#xff…

數據科學與爬蟲技術學習筆記

數據科學與爬蟲技術學習筆記 一、數據科學基礎庫 1. NumPy&#xff1a;數值計算的基石 NumPy 是 Python 科學計算的核心庫&#xff0c;專為數組和矩陣操作設計&#xff0c;能大幅簡化循環操作&#xff0c;提供豐富的數學函數。 核心優勢&#xff1a;高效處理同類型元素的多維…

學習嵌入式之硬件——I2C

一、I2C1.定義內部集成電路的簡稱&#xff0c;半雙工串行同步通信&#xff0c;是芯片和芯片之間的通信方式&#xff1b;通常只有一個主機&#xff0c;多個從機&#xff0c;采用主從應答的方式上圖所示是IIC的總線的使用場景&#xff0c;所有掛載在IIC總線上的設備都有兩根信號線…

使用websockt

封裝websocktHooksimport { ref, onMounted, onUnmounted } from vue;/*** webSocket的Hooks* param {string} websocket鏈接地址* */ export function useWebSocket(url: string) {// 核心狀態 const data: Ref<any> ref(null);//收到websocket返回的數據const socke…

Jmeter自定義腳本

目錄 log&#xff1a;輸出類 Label&#xff1a;你自定義的組件的名稱 FileName&#xff1a;添加的腳本文件的文件名 Parameters&#xff1a;你傳入的參數&#xff0c;是一個字符串 args&#xff1a;你傳入的參數&#xff0c;是一個數組 Parameters和args的異同&#xff1…

飛算 JavaAI 電商零售場景實踐:從訂單峰值到供應鏈協同的全鏈路技術革新

目錄 一、電商核心場景的技術攻堅 1.1 分布式訂單系統的事務一致性設計 1.1.1 TCC 模式下的訂單創建流程 1.1.2 訂單狀態機的可靠流轉 1.2 高并發秒殺系統的架構設計 1.2.1 多級限流與流量削峰 1.2.2 庫存防超賣機制 1.3 智能推薦與用戶行為分析 1.3.1 用戶行為實時采…

51單片機-51單片機介紹

51單片機介紹單片機簡介什么是單片機呢&#xff1f;單片機是一種集成電路芯片&#xff0c;采用超大規模集成電路技術將中央處理器&#xff08;CPU&#xff09;、隨機存儲器&#xff08;RAM&#xff09;、只讀存儲器&#xff08;ROM&#xff09;、多種I/O口、中斷系統、定時器/計…

8月AI面試工具測評:破解規模化招聘難題

金秋校招臨近&#xff0c;企業面臨“百萬簡歷涌入VS面試官團隊告急”的典型困境。傳統線下面試效率低下、標準參差&#xff0c;難以應對短時間內爆發式的人才篩選需求。AI面試工具憑借自動化與智能化特性成為破局關鍵&#xff0c;但市面上產品良莠不齊——究竟哪款能兼顧效率與…

Debian新一代的APT軟件源配置文件格式DEB822詳解

Debian 的 DEB822 格式詳解&#xff1a;新一代 APT 源配置 DEB822 是一種基于 RFC 822 數據格式的配置文件語法&#xff0c;Debian 新一代的 APT 軟件源配置文件格式就采用了 DEB822。DEB822 格式從 Debian 11 (Bullseye) 開始被引入&#xff0c;并在 Debian 12 (Bookworm) 中成…

實戰 AI8051U 音視頻播放:USART-SPI→DMA-P2P→SPI+I2S 例程詳解

視頻P2P播放&#xff0c;時間計算&#xff1a;fps20,50ms 周期刷屏時間&#xff1a;160*80 一幀刷屏時間28.2ms幀間隔&#xff1a;50ms-28.2ms21.8ms音頻雙緩沖區交叉播放&#xff0c;利用視頻播放幀間隔加載下一個緩沖區音頻數據&#xff0c;時間計算&#xff1a;16000采樣率 …

解釋器模式C++

解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種行為型設計模式&#xff0c;它用于定義一種語言的語法規則&#xff0c;并構建一個解釋器來解釋該語言中的句子。這種模式適用于需要處理固定語法規則的場景&#xff0c;如表達式解析、配置文件解析等。 解釋器模式…

debian 13 顯示中文字體 不再顯示菱形塊 終端顯示中文

找了很多坑。。其它就安裝一下中文字體即可 。 apt install ttf-wqy-zenhei 之后測試命令 fc-list &#xff1a;langzh 顯示了剛字體的路徑和中文字即成功了。 rootdebian:~# dpkg-reconfigure locales 以上命令配置中文語言。 debian 12.11 安裝 MySQL 下載配置文件 &am…

51單片機-驅動蜂鳴器模塊教程

本章概述思維導圖&#xff1a; 51單片機驅動蜂鳴器模塊教程 蜂鳴器簡介 蜂鳴器是一種將電信號轉換為聲音信號的電子元件&#xff0c;廣泛應用于報警、提示、通知等場景。其核心原理基于壓電效應或電磁感應&#xff1a;因此可分為兩種類型蜂鳴器&#xff1a;壓電式蜂鳴器和電磁…

常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx運維指南

一、基礎Linux指令1. 文件與目錄操作ls -lh # 查看文件詳情(人類可讀格式) pwd # 顯示當前目錄路徑 cd /path # 切換目錄 mkdir dirname # 創建目錄 rm -rf dirname # 強制刪除目錄 cp -r src dest # 遞歸復制目錄 mv old new # 移動/重命…

小紅書帖子評論的nodejs爬蟲腳本

從小紅書上爬取評論&#xff0c;但是目前還不能完全爬取子評論&#xff0c;使用GPT沒能解決這個問題。后續博主可能會改進。或者如果你懂的話&#xff0c;可以在博主代碼基礎上改進。需要安裝nodejs軟件&#xff0c;部署環境變量。博主是在pycharm中運行的。代碼無套路獲取。自…

【iOS】多線程原理

目錄 前言 基本概念及原理 線程、進程與隊列 線程的定義&#xff1a; 進程的定義&#xff1a; 線程與進程之間的聯系與區別&#xff1a; 線程和runloop的關系 影響任務執行速度的因素 多線程 多線程生命周期 線程池的原理 iOS中多線程的實現方式 線程安全問題 互斥…

藥房發藥的“時間密碼”:同步時鐘用藥安全?

在醫院的藥房里&#xff0c;每一粒藥片的流轉都暗藏“時間密碼”。從藥品入庫到患者服藥&#xff0c;時間記錄的精確性直接關乎生命安全。一旦時間數據出現偏差&#xff0c;輕則導致用藥爭議&#xff0c;重則引發醫療事故。近年來&#xff0c;隨著醫療數字化進程加速&#xff0…