游乐游手机版
首页/前端开发/文章详情

Vue3+Vite+TS+Pinia生命周期详解第八章

时间:2026-07-16 06:31
Vue组件生命周期分为创建、挂载、更新和销毁阶段。Vue3以setup替代beforeCreate和created,在挂载阶段通过onMounted操作DOM,更新阶段使用onUpdated处理DOM更新后的逻辑,销毁阶段需在onBeforeUnmount中清理定时器、事件监听及第三方库实例以防内存泄漏。

8.1 生命周期概述

先来聊聊什么是生命周期钩子。一个Vue组件从被创建到最终销毁,并不是一步到位的,它会经历好几个关键的生命周期阶段。而Vue呢,在每个阶段都会开放一些特定的函数接口——也就是传说中的“生命周期钩子”——让开发者有机会在恰当的时间点插入自己的逻辑。

说得更直白一点:这些钩子就是Vue在关键时刻对你说的一句话——“嘿,现在你可以干点什么了”。

  • 先说说它们之间的规律:

  • Vue2的生命周期钩子命名风格比较传统,比如beforeCreatecreated

  • Vue3则引入了组合式API风格的命名,比如onMountedonUpdated

  • 日常开发中,最常用的几个钩子莫过于:onMounted(挂载完毕)、onUpdated(更新完毕)、onBeforeUnmount(卸载之前)。这几个几乎是天天打交道的角色。

8.2 创建阶段

1、Vue2(beforeCreate、created)

在Vue2里,创建阶段有两个钩子:beforeCreatecreated。一个在创建前执行,一个在创建完成后执行。它们之间最大的区别,说白了就是数据有没有初始化好。看个例子就清楚了:

 复制代码export default {
  data() {
    return {
      sum: 1
    }
  },
  beforeCreate() {
    console.log('创建前');
    console.log(this.sum);
  },
  created() {
    console.log('创建完毕');
    console.log(this.sum);
  }
}  

执行beforeCreate时,datamethodswatchcomputed这些都还没初始化,所以此时拿不到任何数据,自然也调不了watch

到了created阶段,datamethodswatchcomputed都已经是就绪状态,数据已经可以正常访问了。

不过关于watch,需要多说一句:虽然它在created时已经初始化好了,但它的回调函数并不会自动执行,只是被准备好了,等着数据变化时才触发。默认情况(immediate: false)下,watch的回调不会在组件创建时执行,只有监听的数据发生变化后才出手。而如果设置了immediate: true,那watch的回调会在created钩子之后立即执行一次。

2、Vue3(setup)

Vue3的做法就更干脆了——它不再把创建前和创建完成分成两个钩子,而是统一用setup搞定。它不仅囊括了Vue2的beforeCreatecreated的功能,而且所有业务逻辑(数据请求、事件监听、计算属性、副作用管理等等)都可以直接写在这个setup里。

关于setup,目前有两种写法:

(1) 普通setup()

 复制代码<script>
import { ref } from 'vue'export default {
  setup() {
    const count = ref(0)
    const increment = () => count.value++
    
    //  如果没有 return,模板就无法使用 count 和 increment
    return {
      count,
      increment
    }
  }
}
script>

(2)