Vue 3 生命週期

2025年7月2日

學會對應 Composition API 的生命週期,有助於更穩定與清晰的元件開發。

生命週期 Hook 對應表

階段Options APIComposition API
掛載前beforeMountonBeforeMount
掛載後mountedonMounted
更新前beforeUpdateonBeforeUpdate
更新後updatedonUpdated
卸載前beforeUnmountonBeforeUnmount
卸載後unmountedonUnmounted

常見問題與觀念

  • onMounted 和 created 差異? created 執行時 DOM 尚未存在,onMounted 執行時才可操作 DOM
  • onUnmounted 有什麼用途? 常用於清理計時器、取消監聽或終止 API 請求
  • setup() 什麼時候執行? 在 beforeCreate / created 之間,且是 Composition API 的進入點
  • 何時使用 onUpdated? 當你要在 DOM 渲染完後取值、重新計算、或處理畫面更新
  • onActivated / onDeactivated 有什麼用途? 搭配 <keep-alive> 使用,處理頁籤切換等情境

watch vs watchEffect 差異

兩者皆用於追蹤變數變化,但用途不同:

  • watch:需指定追蹤目標,支援新舊值
  • watchEffect:立即執行,會自動追蹤依賴變數

ref vs reactive 差異

用於聲明響應式資料的兩種方式:

  • ref:適用於基本型別,透過 .value 存取
  • reactive:適用於物件型別,可直接操作屬性

v-model 雙向綁定原理

Vue 3 中的 v-model 實際上會對應 :modelValue@update:modelValue


<input
  :value="modelValue"
  @input="$emit('update:modelValue', $event.target.value)"
/>

v-model 修飾符(Modifiers)

Vue 提供三個實用修飾符來處理輸入值格式:

修飾符功能使用情境
.trim自動去除空白字元輸入名稱、帳號避免空格
.number將輸入字串轉為數字數字欄位如年齡、金額
.lazy延遲更新至 change 事件避免即時更新,提高效能

範例:


<input v-model.trim="name" />
<input v-model.number="age" />
<input v-model.lazy="email" />

補充:錯誤處理與狀態追蹤

  • onErrorCaptured:類似 try/catch 的作用,用來集中錯誤處理
  • watchEffect:在 setup 中立即執行,用於追蹤 reactive 狀態

想知道 Pinia 跟 Vuex 的區別嗎?參考: Vuex 與 Pinia

© 2025 Frontend Starter Map. Made with ❤️ using Nuxt 3.

有任何問題歡迎來信討論:

a0912383019@gmail.com