从诞生到离别

Vue组件的生命之旅:从诞生到离别

组件生命周期:数字世界的"生老病死"

Vue组件的生命周期是组件从创建到销毁的整个过程,Vue框架在这个过程的关键时刻提供了生命周期钩子函数,让开发者能够在特定阶段执行自定义代码。组件生命周期主要分为三个阶段:初始化阶段、更新阶段和销毁阶段。

🌱 生活类比:想象一个人的一生

  • 初始化阶段 = 人的出生与成长(从孕育到成年)
  • 更新阶段 = 人的生活变化(搬家、换工作、结婚等)
  • 销毁阶段 = 人的离世与告别(交代后事、离开人世)
┌─────────────────────────────────────────────────────┐
│               Vue组件生命周期三大阶段                │
├─────────────────────┬───────────────────────────────┤
│ 初始化阶段          │ 组件创建、DOM渲染、挂载到页面  │
├─────────────────────┼───────────────────────────────┤
│ 更新阶段            │ 数据变化、DOM重新渲染          │
├─────────────────────┼───────────────────────────────┤
│ 销毁阶段            │ 组件移除、资源释放             │
└─────────────────────┴───────────────────────────────┘

完整生命周期流程图

组件实例创建
      │
      ▼
┌──────────────────┐
│  setup()         │ ◀── 组合式API入口
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│  onBeforeMount   │ ◀── 挂载前
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│  DOM渲染         │ ◀── 虚拟DOM渲染为实际DOM
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│  onMounted       │ ◀── 挂载后
└────────┬─────────┘
         │
         │  ┌─── 数据更新 ────┐
         │  │                 │
         │  ▼                 │
         │┌──────────────────┐│
         ││ onBeforeUpdate   ││ ◀── 更新前
         │└────────┬─────────┘│
         │         │          │
         │         ▼          │
         │┌──────────────────┐│
         ││ DOM重新渲染      ││
         │└────────┬─────────┘│
         │         │          │
         │         ▼          │
         │┌──────────────────┐│
         ││ onUpdated        ││ ◀── 更新后
         │└────────┬─────────┘│
         │         │          │
         └─────────┘          │
                   │          │
                   │          │
                   │          │
         ┌─────────▼──────────┘
         │
         ▼
┌──────────────────┐
│ onBeforeUnmount  │ ◀── 卸载前
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│ DOM移除          │
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│ onUnmounted      │ ◀── 卸载后
└──────────────────┘

1. 初始化阶段:组件的"出生与成长"

初始化阶段包含组件实例的创建到DOM渲染完成的全过程,关键钩子函数是onBeforeMount和onMounted。

onBeforeMount - 万事俱备,只欠东风

onBeforeMount钩子函数在组件DOM树创建之前被调用,此时虚拟DOM已经创建完成,但还没有被渲染到页面上。适合执行一些与DOM无关的初始化工作。

🏗️ 生活类比:房屋建设

  • 建筑图纸已经设计好(虚拟DOM已创建)
  • 但实际建筑还没开始施工(真实DOM未渲染)
  • 可以做一些施工前的准备工作
import {
   
    onBeforeMount, ref } from 'vue'

export default {
   
   
  setup() {
   
   
    const dataReady = ref(false)
    
    onBeforeMount(() => {
   
   
      console.log('组件即将挂载')
      // 初始化一些与DOM无关的数据或状态
      dataReady.value = true
      
      // 可以进行一些初始化设置,但还不能访问DOM
      console.log('DOM元素是否可访问?', document.querySelector('.my-component') === null)
      // 输出: DOM元素是否可访问? true (因为此时DOM还未渲染)
      
      // 适合进行不依赖DOM的准备工作
      // 例如:初始化状态、设置环境变量等
    })
    
    return {
   
    dataReady }
  }
}

onMounted - 粉墨登场,正式亮相

onMounted钩子函数在组件DOM挂载完成后调用,此时真实DOM已经渲染完成,可以安全地进行DOM操作、发送网络请求、添加事件监听器等操作。这是初始化阶段最常用的生命周期钩子。

🎭 生活类比:演员登台

  • 舞台布置完成(DOM已渲染)
  • 演员正式亮相(组件可见)
  • 开始表演互动(可以操作DOM,与用户交互)
import {
   
    onMounted, ref } from 'vue'

export default {
   
   
  setup() {
   
   
    const chartRef = ref(null)
    const chartInstance = ref(null)
    const loading = ref(true)
    const data = ref([])
    
    onMounted(async () => {
   
   
      console.log('组件已挂载')
      
      // 1. DOM操作
      const element = document.querySelector('.my-component')
      console.log('DOM元素现在可访问'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值