Chapter 08 Vue生命周期

欢迎大家订阅【Vue2+Vue3】入门到实践专栏,开启你的 Vue 学习之旅!

文章目录


前言

Vue.js 是一个渐进式的 JavaScript 框架,广泛用于构建用户界面。理解 Vue 的生命周期对于开发高效、可维护的应用程序至关重要。本文详细讲解了 Vue 组件的生命周期及其各个阶段的钩子函数。


本篇文章参考黑马程序员

一、生命周期阶段

Vue生命周期:一个Vue实例从创建到销毁的整个过程。

生命周期四个阶段:
①创建阶段

创建阶段是 Vue 实例的初始化过程。在这个阶段,Vue 实例被创建,数据观测和事件配置开始,但尚未进行任何 DOM 操作。

②挂载阶段

挂载阶段是将 Vue 实例挂载到 DOM 上的过程。在这个阶段,模板被编译并插入到 DOM 中。

③更新阶段

更新阶段是当组件的数据发生变化时,Vue 会重新渲染组件的过程。在这个阶段,虚拟 DOM 会被重新计算并更新到实际 DOM 中。

④销毁阶段

销毁阶段是 Vue 实例被销毁的过程。在这个阶段,组件的所有资源和事件监听器都会被清理。

二、生命周期钩子

在 Vue 生命周期的过程中,会自动调用一些函数,这些函数被称为"生命周期钩子"。

生命周期钩子允许开发者在特定阶段执行自定义代码。每个阶段都有相应的生命周期钩子,以便于开发者在合适的时机进行操作。

①创建阶段

在这个阶段,Vue 实例被初始化,数据观测和事件配置开始。

  • beforeCreate

    实例初始化后被调用,数据观测和事件配置尚未完成,无法访问 datamethods

  • created

    实例创建完成后被调用,可以访问 datamethods,适合进行数据获取和初始化操作,但此时 DOM 还未挂载。

【示例】

html 复制代码
<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 1. 创建阶段(准备数据)
      beforeCreate () {
        console.log('beforeCreate 响应式数据准备好之前', this.count)
      },
      created () {
        console.log('created 响应式数据准备好之后', this.count)
        // this.数据名 = 请求回来的数据
        // 可以开始发送初始化渲染的请求了
      },
    })
  </script>
</body>

运行结果:

②挂载阶段

在这个阶段,Vue 实例被挂载到 DOM 上。

  • beforeMount

    挂载开始前被调用,此时模板已编译,但尚未插入到 DOM 中,可以在此阶段进行一些准备工作。

  • mounted

    实例挂载到 DOM 上后被调用,此时可以进行 DOM 操作,如获取元素的尺寸或进行 API 请求。

【示例】

html 复制代码
<body>

  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      

      // 2. 挂载阶段(渲染模板)
      beforeMount () {
        console.log('beforeMount 模板渲染之前', document.querySelector('h3').innerHTML)
      },
      mounted () {
        console.log('mounted 模板渲染之后', document.querySelector('h3').innerHTML)
        // 可以开始操作dom了
      },

      
    })
  </script>
</body>

运行结果:

③更新阶段

当数据变化时,组件会重新渲染。

  • beforeUpdate

    数据更新后,虚拟 DOM 重新渲染前被调用,可以访问更新前的状态。

  • updated

    组件的 DOM 更新后被调用,可以进行 DOM 操作。

【示例】

html 复制代码
<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 3. 更新阶段(修改数据 → 更新视图)
      beforeUpdate () {
        console.log('beforeUpdate 数据修改了,视图还没更新', document.querySelector('span').innerHTML)
      },
      updated () {
        console.log('updated 数据修改了,视图已经更新', document.querySelector('span').innerHTML)
      },

    })
  </script>
</body>

运行结果:

点击"+"号按钮更改数据后:

④销毁阶段

在这个阶段,Vue 实例被销毁。

  • beforeDestroy

    实例销毁之前被调用,可以进行清理操作,如移除事件监听器或定时器。

  • destroyed

    实例销毁后被调用,此时所有的事件监听和子实例都被移除,可以在此阶段进行一些清理工作。

【示例】

html 复制代码
<body>
  <div id="app">
    <h3>{{ title }}</h3>
    <div>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100,
        title: '计数器'
      },
      // 4. 卸载阶段
      beforeDestroy () {
        console.log('beforeDestroy, 卸载前')
        console.log('清除掉一些Vue以外的资源占用,定时器,延时器...')
      },
      destroyed () {
        console.log('destroyed,卸载后')
      }
    })
  </script>
</body>

运行结果:

在控制台输入app.$destroy()并回车后:

Vue.$destroy() 是 Vue 实例的方法,用于手动销毁 Vue 实例。调用此方法后,Vue 会执行一系列清理操作,以确保组件及其相关资源被正确释放。

三、生命周期图示

以下是 Vue 组件生命周期的图示,展示了各个钩子的调用顺序:
beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed

相关推荐
Redstone Monstrosity几秒前
字节二面
前端·面试
东方翱翔8 分钟前
CSS的三种基本选择器
前端·css
Fan_web30 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei196238 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝39 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
冯宝宝^42 分钟前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法