vue2&vue3&小程序簡介
Vue2、Vue3、小程序頁面生命周期詳解
本篇將對比 Vue2、Vue3 以及小程序頁面/組件的生命周期,簡單梳理各自特點、差異、新增優化點。
?? Vue2 生命周期
beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → destroyed
說明:
| 生命周期鉤子 | 含義 |
|---|---|
| beforeCreate | 實例初始化之前,數據未掛載 |
| created | 實例創建完成,data 可訪問 |
| beforeMount | 掛載前,$el 和模板已生成但未插入 DOM |
| mounted | 掛載完成,DOM 可訪問 |
| beforeUpdate | 數據更新前觸發 |
| updated | 數據更新后觸發(更新 DOM 后) |
| beforeDestroy | 實例銷毀前,可做清理工作 |
| destroyed | 實例銷毀后 |
示例:
export default {
data() {
return { count: 0 }
},
created() {
console.log('組件創建完成')
},
mounted() {
console.log('DOM已掛載')
}
}
?? Vue3 生命周期
Vue3 提供了與 Vue2 一致的生命周期概念,并新增組合式 API 的方式定義。
組合式 API 寫法
import { onMounted, onUpdated, onUnmounted } from 'vue';
export default {
setup() {
onMounted(() => {
console.log('Vue3 組件掛載')
});
}
}
Vue3 生命周期鉤子對比:
| Vue2 | Vue3 Options API | Vue3 Composition API |
|---|---|---|
| beforeCreate | beforeCreate | setup() 中邏輯 |
| created | created | setup() 中邏輯 |
| beforeMount | beforeMount | onBeforeMount |
| mounted | mounted | onMounted |
| beforeUpdate | beforeUpdate | onBeforeUpdate |
| updated | updated | onUpdated |
| beforeDestroy | beforeUnmount | onBeforeUnmount |
| destroyed | unmounted | onUnmounted |
Vue 3 新特性與優勢
-
Composition API(組合式API)
-
把零散的代碼邏輯按功能打包成「積木塊」,想用哪塊插哪塊,告別滿屏亂跳的
data和methods。 -
示例代碼:
<script setup> // 以前:data、methods、computed 散落各處 // 現在:按功能聚合 import { ref, computed } from 'vue' // 計數器邏輯打包成一個「積木塊」 function useCounter() { const count = ref(0) const double = computed(() => count.value * 2) const increment = () => count.value++ return { count, double, increment } } // 直接插到組件里用 const { count, double, increment } = useCounter() </script>
-
-
性能暴擊(Proxy 取代 defineProperty)
-
Vue2 用「貼紙條」(
Object.defineProperty)監聽數據,Vue3 改用「監控攝像頭」(Proxy),數組修改、對象新增屬性再也不用手動$set。 -
示例代碼:
// Vue2:數組 push 需要特殊處理 this.$set(this.list, index, newValue) // Vue3:直接莽,全自動監聽 const list = reactive([1, 2, 3]) list.push(4) // 觸發響應式更新
-
-
按需編譯 + Tree Shaking
- 打包時只帶走真正用到的代碼,比如不用
v-model就不打包相關邏輯,項目體積瘦身 30%+。
- 打包時只帶走真正用到的代碼,比如不用
-
碎片化組件(Fragment + Teleport)
-
組件終于能像普通 HTML 一樣寫多個根標簽(不用強行套
div),還能用<Teleport>把模態框「傳送」到body根部,避免 CSS 層級問題。 -
示例代碼:
<template> <!-- 合法!多個根元素 --> <header>標題</header> <main>內容</main> <!-- 把彈窗傳送到 body 末尾 --> <Teleport to="body"> <div class="modal">我是全局彈窗</div> </Teleport> </template>
-
-
TypeScript 原生支持
-
代碼提示精準到毛孔,類型檢查直接內置,再也不用和
Vue.extend斗智斗勇。 -
示例代碼:
interface User { id: number name: string } const user = ref<User>({ id: 1, name: '張三' }) // 類型安全!
-
-
其他實用武器庫
- Suspense:異步組件加載時顯示 loading 狀態(類似 React)。
- 自定義渲染器:用 Vue 語法開發小程序/Canvas 應用。
- Vite 加持:秒級熱更新,告別 webpack 漫長等待。
?? Vue 組件相關生命周期
| 生命周期 | 含義 |
|---|---|
| props 更新 | Vue2 和 Vue3 均可監聽 props 變化(通過 watch) |
| slot 渲染 | 在 mounted 后插槽內容可以訪問 |
| 異步組件 | Vue3 支持 defineAsyncComponent 封裝異步組件 |
示例:異步組件
import { defineAsyncComponent } from 'vue';
const MyAsync = defineAsyncComponent(() => import('./MyComponent.vue'));
?? 小程序生命周期
頁面生命周期
onLoad → onShow → onReady → onHide → onUnload
| 生命周期 | 含義 |
|---|---|
| onLoad | 頁面加載,接受參數 |
| onShow | 頁面顯示,類似 activated |
| onReady | 頁面初次渲染完成 |
| onHide | 頁面隱藏 |
| onUnload | 頁面卸載 |
組件生命周期
created → attached → ready → detached
| 生命周期 | 含義 |
|---|---|
| created | 組件實例剛創建 |
| attached | 節點插入頁面 DOM |
| ready | 組件布局完成 |
| detached | 節點從頁面移除 |
示例:頁面
Page({
onLoad(query) {
console.log('頁面加載', query);
},
onReady() {
console.log('頁面初次渲染完成');
}
})
示例:組件
Component({
lifetimes: {
created() {
console.log('組件創建');
},
ready() {
console.log('組件渲染完成');
}
}
})
? 總結對比
| 平臺 | 生命周期粒度 | 特點 |
|---|---|---|
| Vue2 | 清晰但耦合 | 生命周期集中在 Options 中 |
| Vue3 | 更靈活 | Composition API 更利于邏輯復用、類型支持更好 |
| 小程序 | 分頁面/組件 | 生命周期更貼近原生環境,適合事件驅動模型 |
適配建議:
- 如果要構建大規模應用,Vue3 推薦使用組合式 API 搭配 TypeScript;
- 小程序推薦封裝一層統一生命周期處理,方便復用;
- Vue2 項目可以漸進遷移 Vue3,重構時可引入 Composition API。
?? 推薦工具:
- Vue3 Composition API 官方指南
- 小程序開發者工具調試生命周期
- Vueuse 處理常見生命周期邏輯

浙公網安備 33010602011771號