掌握Vue 3生命周期:從組合式API到高效代碼實踐

引言

在 Vue 3 中,生命周期的概念得到了進一步的優化和簡化。Vue 3 引入了組合式 API(Composition API),這為開發者提供了更靈活的方式來組織和重用代碼邏輯。與傳統的選項式 API(Options API)相比,組合式 API 使得生命周期鉤子的使用更加直觀和方便。

Vue 3 生命周期概述

Vue 3 引入了新的生命周期鉤子和改進了現有的生命周期管理方式,以適應組合式 API 的引入。生命周期鉤子是 Vue 組件中用于控制組件在不同階段執行特定邏輯的函數。了解這些鉤子對于構建高效和可維護的 Vue 應用程序至關重要。

Vue 3 中的生命周期鉤子

在 Vue 3 中,生命周期鉤子被分為兩個主要類別:組合式 API 鉤子和選項式 API 鉤子。組合式 API 提供了一種更靈活的方式來組織和重用代碼邏輯,而選項式 API 則保持了 Vue 2 的風格,適合那些熟悉舊版本的開發者。

組合式 API(Composition API)與生命周期鉤子的關系

組合式 API 通過引入?setup()?函數,為開發者提供了一種新的方式來編寫組件邏輯。在?setup()?函數中,你可以使用一系列的響應式函數和生命周期鉤子,這些鉤子與傳統的選項式 API 中的鉤子在功能上是等價的,但使用方式有所不同。

在組合式 API 中,生命周期鉤子被定義為獨立的函數,而不是作為組件選項。這意味著你可以根據需要導入和使用這些鉤子,而不是依賴于組件的選項對象。這種靈活性使得代碼更加模塊化和可重用。

例如,onMounted()?鉤子在組件掛載到 DOM 后被調用,無論是在?setup()?函數中直接使用,還是在其他組合式 API 函數中導入使用,其功能都是相同的,而且可以重復使用。這為開發者提供了更大的靈活性,允許他們在不同的上下文中重用生命周期邏輯。

Vue 3 生命周期鉤子詳解

setup()
  • 作用和時機setup()?是 Vue 3 組件的入口點,它在組件創建之前被調用,此時組件實例尚未創建。這是組合式 API 的核心,允許你在組件實例化之前執行邏輯,如定義響應式狀態、方法和生命周期鉤子。
  • setup() 中的生命周期鉤子:在?setup()?函數中,你可以直接使用生命周期鉤子,如?onMounted()onUnmounted()?等,這些鉤子在組件的相應生命周期階段被調用。
onBeforeMount()
  • 作用onBeforeMount()?鉤子在組件即將掛載到 DOM 之前被調用。這是在組件的模板或渲染函數被編譯成虛擬 DOM 之后,但在實際 DOM 被創建和插入到頁面之前。
  • 何時調用:在?setup()?函數之后,組件的模板或渲染函數被編譯后,但在 DOM 更新之前。
onMounted()
  • 作用onMounted()?鉤子在組件掛載到 DOM 后被調用。這是在組件的模板或渲染函數被編譯成虛擬 DOM,并且實際 DOM 被創建和插入到頁面之后。
  • 何時調用:在?onBeforeMount()?鉤子之后,組件的 DOM 已經被創建并插入到頁面。
onBeforeUpdate()
  • 作用onBeforeUpdate()?鉤子在組件即將更新其 DOM 之前被調用。這是在響應式狀態變化后,但在實際 DOM 更新之前。
  • 何時調用:在組件的響應式狀態變化后,但在 DOM 更新之前。
onUpdated()
  • 作用onUpdated()?鉤子在組件更新其 DOM 后被調用。這是在響應式狀態變化后,DOM 已經被更新。
  • 何時調用:在?onBeforeUpdate()?鉤子之后,組件的 DOM 已經被更新。
onBeforeUnmount()
  • 作用onBeforeUnmount()?鉤子在組件即將卸載和銷毀之前被調用。這是在組件的 DOM 被移除之前,但在組件實例銷毀之前。
  • 何時調用:在組件的 DOM 即將被移除之前。
onUnmounted()
  • 作用onUnmounted()?鉤子在組件卸載和銷毀后被調用。這是在組件的 DOM 已經被移除,組件實例已經銷毀。
  • 何時調用:在?onBeforeUnmount()?鉤子之后,組件的 DOM 已經被移除,組件實例已經銷毀。
onErrorCaptured()
  • 作用onErrorCaptured()?鉤子在捕獲一個來自子孫組件的錯誤時被調用。這是在錯誤被拋出后,但在它被全局錯誤處理器處理之前。
  • 何時調用:在子孫組件發生錯誤時。
onRenderTracked()
  • 作用onRenderTracked()?鉤子在渲染過程中追蹤到一個依賴時被調用。這是在組件的響應式依賴被追蹤時,通常用于調試。
  • 何時調用:在組件的響應式依賴被追蹤時。
onRenderTriggered()
  • 作用onRenderTriggered()?鉤子在渲染過程中觸發一個依賴時被調用。這是在組件的響應式依賴被觸發時,通常用于調試。
  • 何時調用:在組件的響應式依賴被觸發時。

這些生命周期鉤子為開發者提供了在組件生命周期的特定時刻執行代碼的能力,從而允許更精細地控制組件的行為和性能。在實際開發中,合理地使用這些鉤子可以提高應用的響應性和效率。

選項式和組合式

選項式 API(Options API)示例

在選項式 API 中,生命周期鉤子是作為組件對象的屬性定義的。

export default {data() {return {message: 'Hello Vue 3!'};},created() {console.log('組件創建完成', this.message);},mounted() {console.log('組件掛載完成', this.message);},beforeDestroy() {console.log('組件即將銷毀', this.message);}
};

在上面的示例中,createdmounted?和?beforeDestroy?是生命周期鉤子,它們分別在組件創建、掛載和銷毀之前被調用。

組合式 API(Composition API)示例

在組合式 API 中,生命周期鉤子是作為獨立的函數導入并使用的。

import { ref, onMounted, onBeforeUnmount } from 'vue';export default {setup() {const message = ref('Hello Vue 3!');onMounted(() => {console.log('組件掛載完成', message.value);});onBeforeUnmount(() => {console.log('組件即將銷毀', message.value);});return {message};}
};

在上面的示例中,onMounted?和?onBeforeUnmount?是生命周期鉤子,它們分別在組件掛載和即將銷毀之前被調用。ref?用于創建響應式數據。

選項式 API 與組合式 API 的主要區別

  • 代碼組織:選項式 API 通過將邏輯組織在不同的選項(如?data,?methods,?created,?mounted?等)中,而組合式 API 通過?setup?函數將邏輯組織在一起,使得代碼更加模塊化和可重用。
  • 靈活性:組合式 API 允許開發者在?setup?函數中自由地使用響應式 API 和生命周期鉤子,而選項式 API 的邏輯組織方式較為固定。
  • 可讀性:對于熟悉 Vue 2 的開發者來說,選項式 API 可能更直觀易懂,而組合式 API 需要一定的學習曲線,但一旦掌握,可以編寫出更加清晰和可維護的代碼。

在實際開發中,你可以根據項目需求和個人偏好選擇使用選項式 API 或組合式 API。Vue 3 提供了這兩種 API,以適應不同場景和開發者的習慣。在組合式API中,我們可以把相關聯的模塊放到一個setup()里,整個script由多個setup()組成,個人認為組合式的出現是增加了代碼的可維護性,減少了‘鼠標滾輪掄到冒煙’這種情況。

總結

Vue 3 的生命周期鉤子是構建高效和可維護 Vue 應用程序的關鍵。它們允許開發者在組件的不同生命周期階段執行特定的邏輯,從而控制組件的行為和性能。正確理解和使用這些生命周期鉤子,對于編寫高質量的 Vue 代碼至關重要。

相關參考資料推薦

  • Vue 3 官方文檔:這是學習 Vue 3 的最佳起點,提供了關于生命周期鉤子的詳細文檔和示例。
  • Vue.js 3.x 官方中文文檔:中文版的官方文檔,方便中文讀者閱讀和理解。
  • Vue 3 Composition API 完全指南:官方指南中關于組合式 API 的部分,詳細介紹了如何在 Vue 3 中使用組合式 API。
  • Vue 3 生命周期鉤子詳解:官方文檔中關于生命周期鉤子的詳細說明,包括每個鉤子的調用時機和用途。
  • Vue 3 組件生命周期鉤子的使用:官方文檔中關于如何在組合式 API 中使用生命周期鉤子的示例和解釋。
  • Vue 3 組件生命周期鉤子的使用:官方文檔中關于如何在組合式 API 中使用生命周期鉤子的示例和解釋。
  • Vue 3 組件生命周期鉤子的使用:官方文檔中關于如何在組合式 API 中使用生命周期鉤子的示例和解釋。

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

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

相關文章

node-sass 老版本4.14.0 安裝失敗解決辦法

舊項目 npm install 發現 node-sass 安裝 失敗 切換淘寶鏡像之后 不能完全解決問題。因為需要編譯,本地沒有Python環境不能實現 安裝node-sass時,在install階段會從Github上下載一個叫binding.node的文件,而「GitHub Releases」里的文件…

C++編譯鏈接原理

從底層剖析程序從編譯到運行的整個過程 三個階段 一、編譯階段二、鏈接階段三、運行階段 為了方便解釋,給出兩端示例代碼,下面圍繞代碼進行實驗: //sum.cpp int gdata 10; int sum(int a,int b) {return ab; }//main.cpp extern int gdata…

Stream流的簡單用法

filter //stream流中的filter //filter 方法用于通過設置的條件過濾出元素。以下代碼片段使用 filter 方法過濾掉空字符串&#xff1a; List<String> filter Arrays.asList("mz", "", "mz55", "m", "MZ"); Stream&l…

初始redis:在Ubuntu上安裝redis

1.先切換到root用戶 使用su命令切換到root 2.使用apt命令來搜索redis相關的軟件包 命令&#xff1a;apt search redis 3.下載redis 命令&#xff1a; apt install redis 在Ubuntu 20.04中 &#xff0c;下載的redis版本是redis5 4.查看redis狀態 命令&#xff1a; netst…

Python自動化測試系列[v1.0.0][高效自動化設計]

Python多線程應用于自動化測試 將多線程在測試巧妙地應用&#xff0c;確實會帶來很多好處&#xff0c;并且這是充分利用機器資源執行高效率測試很好的方式 # -*- coding: utf-8 -*- import threading from time import ctime import time from selenium import webdriverdef …

LLM 入門與實踐(四) Yi 部署與分析

本文截取自20萬字的《PyTorch實用教程》&#xff08;第二版&#xff09;&#xff0c;敬請關注&#xff1a;《Pytorch實用教程》&#xff08;第二版&#xff09;無論是零基礎入門&#xff0c;還是CV、NLP、LLM項目應用&#xff0c;或是進階工程化部署落地&#xff0c;在這里都有…

python對象

類 我們目前所學習的對象都是Python內置的對象但是內置對象并不能滿足所有的需求&#xff0c;所以我們在開發中經常需要自定義一些對象類&#xff0c;簡單理解它就相當于一個圖紙。在程序中我們需要根據類來創建對象類就是對象的圖紙&#xff01;我們也稱對象是類的實例&#…

JAVA--IO流

一、IO流什么&#xff1f; I/O是Input/output的縮寫&#xff0c;用于處理設備之間的數據傳輸。如讀/寫文件、網絡通訊。 java程序中&#xff0c;對于數據的輸入、輸出是以流&#xff08;Stream)的方式進行。 Java.io包下提供了各種流類和接口&#xff0c;用以獲取不同種類的數…

web自動化(六)unittest 測試報告跳過用例

三種類型測試報告&#xff1a;unittest.TextTestRunner、BeautifulReport、HTMLTestRunner Python3.0 無法直接安裝 HTMLTestRunner 安裝 XTestRunner pip install XTestRunner安裝 BeautifulReport pip install BeautifulReportimport unittestclass TestSkipCase(unittest…

ELfK logstash filter模塊常用的插件 和ELFK部署

ELK之filter模塊常用插件 logstash filter模塊常用的插件&#xff1a; filter&#xff1a;表示數據處理層&#xff0c;包括對數據進行格式化處理、數據類型轉換、數據過濾等&#xff0c;支持正則表達式 grok 對若干個大文本字段進行再分割成一些小字段 (?<字段名…

【算法篇】KMP算法,一種高效的字符串匹配算法

我們今天了解一個字符串匹配算法-KMP算法&#xff0c;內容難度相對來說較高&#xff0c;建議先收藏再細品&#xff01;&#xff01;&#xff01; KMP算法的基本概念 KMP算法是一種高效的字符串匹配算法&#xff0c;由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt提出的&#…

LLMs之gptpdf:gptpdf的簡介、安裝和使用方法、案例應用之詳細攻略

LLMs之gptpdf&#xff1a;gptpdf的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 gptpdf的簡介 1、處理流程 第一步&#xff0c;使用 PyMuPDF 庫&#xff0c;對 PDF 進行解析出所有非文本區域&#xff0c;并做好標記&#xff0c;比如: 第二步&#xff0c;使用視覺大模型&…

離婚后,孩子就讀私立高中的高昂學費誰承擔?

江蘇省南京市六合區人民法院審結一起撫養費糾紛案件&#xff0c;認定夫妻雙方在決定孩子教育事務上均存在責任&#xff0c;為保障臨近高考的未成年子女的切身利益&#xff0c;認定由夫妻雙方按比例承擔教育費。   2015年6月&#xff0c;李某與王某離婚&#xff0c;雙方之子小…

PCL 有序點云的法線估計(使用積分圖進行法線估計)

使用積分圖進行法線估計 一、概述1.1 概念1.2 有序點云與無序點云1.2.1 有序點云1.2.2 無序點云1.3 代碼講解二、代碼實現三、結果示例一、概述 1.1 概念 使用積分圖進行法線估計:計算一個有序點云的法線,注意該方法只適用于有序點云。 1.2 有序點云與無序點云 有序點云與無…

MySQL安裝時initializing database失敗

問題頁面&#xff1a; 解決方法&#xff1a; 1.勾選紅框中的選項&#xff1a; 2.將下圖紅框中全部改為英文&#xff1a; 然后一路next就可以了。

cs231n作業1——KNN

參考文章&#xff1a;assignment1——KNN KNN 測試時分別計算測試樣本和訓練集中的每個樣本的距離&#xff0c;然后選取距離最近的k個樣本的標簽信息來進行分類。 方法1&#xff1a;Two Loops for i in range(num_test):for j in range(num_train):dist X[i, :] - self.X…

vue3使用方式匯總

1、引入iconfont阿里圖庫圖標&#xff1a; 1.1 進入阿里圖標網站&#xff1a; iconfont阿里&#xff1a;https://www.iconfont.cn/ 1.2 添加圖標&#xff1a; 1.3 下載代碼&#xff1a; 1.4 在vue3中配置代碼&#xff1a; 將其代碼復制到src/assets/fonts/目錄下&#xff1…

Mysql之Using index for skip scan

一、Using index for skip scan 在 MySQL 中&#xff0c;EXPLAIN 語句用于顯示查詢執行計劃&#xff0c;幫助我們理解查詢是如何被執行的&#xff0c;以及如何優化查詢。其中&#xff0c;Extra 列提供了關于查詢執行的一些額外信息。當 Extra 列顯示 Using index for skip sca…

CF F. Alex‘s whims

原題鏈接&#xff1a;Problem - 1899F - Codeforces 題目大意&#xff1a;要求構建出一顆樹&#xff0c;多次詢問樹的葉節點之間的距離有沒有達到要求的距離&#xff0c;如果有直接輸出-1 -1 -1&#xff0c;如果沒有可以斷開一條邊和連上一條邊&#xff0c;輸出x y z&#xff…

mp4視頻太大怎么壓縮不影響畫質,mp4文件太大怎么變小且清晰度高

在數字化時代&#xff0c;我們常常面臨視頻文件過大的問題。尤其是mp4格式的視頻&#xff0c;文件大小往往令人望而卻步。那么&#xff0c;如何在不影響畫質的前提下&#xff0c;有效地壓縮mp4視頻呢&#xff1f;本文將為您揭秘幾種簡單實用的壓縮技巧。 在分享和存儲視頻時&am…