《Vue.js 生命周期全解析:从创建到销毁的每一步》

《Vue.js 生命周期全解析:从创建到销毁的每一步》

在这里插入图片描述

1. Vue 生命周期概述

Vue 生命周期可以分为以下几个阶段:

  • 创建阶段:Vue 实例被创建和挂载到 DOM 上的过程。
  • 更新阶段:当数据变化时,Vue 实例会重新渲染,更新视图。
  • 销毁阶段:当 Vue 实例被销毁时,会进行资源清理。
  • 每个阶段中,Vue 都提供了一些钩子函数,允许开发者在这些阶段执行自定义逻辑。

2. 生命周期钩子函数

生命周期钩子函数图示

在 Vue 实例的生命周期中,钩子函数的调用顺序如下图所示:

rust
beforeCreate -> created -> beforeMount -> mounted
     |              |                 |
  Data初始化    组件实例化    DOM挂载完毕    更新数据...

钩子函数的详细解释

以下是 Vue 实例生命周期的主要钩子函数及其描述:

生命周期钩子触发时机使用场景
beforeCreate在实例创建之后,数据观测和事件/生命周期设置之前触发通常不在此钩子中进行操作,因数据不可用
created在实例创建后,数据观测、事件/生命周期已设置完成之后触发在此钩子中,可以访问数据、事件、计算属性等
beforeMount在挂载开始之前触发,相关的 render 函数首次被调用可以用来进行初始化操作或改变 props 值
mounted在 DOM 挂载完成后触发,视图已渲染,$el 可以访问到可用于执行 DOM 操作或发起 HTTP 请求
beforeUpdate当数据更新时,视图重新渲染之前触发可用于操作即将更新的 DOM,进行一些清理工作
updated在数据更新并且视图重新渲染后触发可用于进行后续操作,例如与第三方库交互
beforeDestroy在实例销毁之前触发可以用于清理定时器、取消订阅等操作
destroyed实例销毁后触发用于清理资源或执行销毁后的操作,如移除事件监听器等

3. 各生命周期钩子的代码示例

beforeCreate

beforeCreate 钩子在 Vue 实例初始化时调用,此时无法访问到数据、计算属性、事件等。

new Vue({
  beforeCreate() {
    console.log('beforeCreate: 实例创建之前');
  },
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
});

created

created 钩子在实例被创建后、数据观测和事件/生命周期设置完成之后被调用,此时可以访问到数据、计算属性、事件等。

new Vue({
  created() {
    console.log('created: 实例创建完成,数据可用');
    console.log(this.message); // 'Hello Vue!'
  },
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
});

beforeMount

beforeMount 钩子在挂载开始之前被调用,这时候模板已经编译好,但尚未插入到 DOM。

new Vue({
  beforeMount() {
    console.log('beforeMount: 模板挂载之前');
  },
  mounted() {
    console.log('mounted: DOM 已挂载');
  },
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
});

mounted

mounted 钩子在 DOM 挂载完成之后调用,可以在此处执行一些需要 DOM 交互的操作,如设置定时器或访问 DOM 元素。

new Vue({
  mounted() {
    console.log('mounted: DOM 挂载完成');
    document.getElementById('app').style.color = 'red';
  },
  data() {
    return {
      message: 'Hello Vue!'
    };
  }
});

beforeUpdate

beforeUpdate 钩子在数据变化并且视图重新渲染之前调用,可以在此时进行一些准备工作。

new Vue({
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  beforeUpdate() {
    console.log('beforeUpdate: 数据更新前');
  },
  updated() {
    console.log('updated: 数据更新后');
  }
});

updated

updated 钩子在数据更新并且 DOM 更新后调用。这个钩子常用于更新第三方库,或者进行一些渲染后的操作。

new Vue({
  data() {
    return {
      message: 'Hello Vue!'
    };
  },
  updated() {
    console.log('updated: 数据更新后');
  }
});

beforeDestroy

beforeDestroy 钩子在 Vue 实例销毁之前调用,适合进行资源清理工作,如清除定时器、移除事件监听器等。

new Vue({
  beforeDestroy() {
    console.log('beforeDestroy: 实例销毁前');
  },
  destroyed() {
    console.log('destroyed: 实例销毁后');
  }
});

4. 生命周期钩子总结

生命周期钩子描述触发时机
beforeCreate实例创建前,无法访问数据和事件在实例初始化时触发
created实例创建后,数据可访问,事件、生命周期已设置实例已创建,数据初始化完成之后
beforeMount在挂载开始前,render 函数首次被调用组件实例化后但 DOM 尚未挂载前
mountedDOM 挂载完成后DOM 完全挂载,组件显示到页面上
beforeUpdate数据更新后,DOM 更新前数据发生变化之前,视图未重新渲染
updated数据更新并且视图重新渲染后数据更新并重新渲染之后
beforeDestroy实例销毁前用于清理工作(例如移除事件监听器)
destroyed实例销毁后实例销毁之后,适合做销毁后的清理工作,例如移除定时器、事件监听等

5. 总结

Vue 的生命周期钩子函数提供了丰富的操作点,允许开发者在不同的阶段插入自定义逻辑。理解生命周期钩子的触发顺序和适用场景,有助于编写高效、可维护的 Vue 应用。通过本文对 Vue 生命周期的讲解,相信你对 Vue 实例的创建、更新和销毁过程有了更清晰的了解。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值