Vue组件生命周期详解:从创建到销毁的全过程


本文介绍了Vue组件生命周期的各个阶段以及对应的生命周期钩子函数,在不同阶段执行特定的逻辑,帮助我们更好地理解和掌握Vue的工作原理

在Vue中,每个组件都有自己的生命周期,Vue提供了一组生命周期钩子函数,用于在组件的不同阶段执行特定的逻辑。下面是Vue中的生命周期钩子函数:

  1. beforeCreate:实例刚被创建,数据观测和事件机制都未初始化,不能访问data和methods等属性。

  2. created:实例已经创建完成,数据观测和事件机制都已经初始化完成,但是DOM节点还没有被创建,不能访问$el属性。

  3. beforeMount:模板已经编译完成,但是还没有挂载到页面中去。

  4. mounted:模板已经编译完成,挂载到页面中去了,此时可以访问到$el属性,也就是组件中的DOM元素。

  5. beforeUpdate:组件中的数据发生变化,但是DOM还没有重新渲染,此时可以对一些数据进行处理。

  6. updated:组件中的数据发生变化,并且DOM已经重新渲染完成,此时可以对渲染后的数据进行处理。

  7. beforeDestroy:实例即将被销毁,此时可以进行一些善后工作,如取消定时器、取消事件监听等。

  8. destroyed:实例已经被销毁,此时组件中的DOM元素也同时被销毁,无法再访问组件中的属性和方法。

在使用Vue开发时,生命周期函数的作用很大程度上取决于你的具体需求。如果需要在数据变化前进行一些额外的操作,可以使用beforeUpdate钩子函数,如果需要在组件销毁前进行一些清理操作,可以使用beforeDestroy钩子函数。需要注意的是,同时使用多个钩子函数时,Vue会按照预定义的顺序依次调用它们。

生命周期代码示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Vue Lifecycle Example</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    <h1>{{ message }}</h1>
  </div>
  <script>
    new Vue({
      el: '#app', // 绑定根元素
      data: {
        message: 'Vue Lifecycle Example'
      },
      beforeCreate: function() { // 实例刚被创建,数据观测和事件机制都未初始化
        console.log('beforeCreate hook triggered');
      },
      created: function() { // 实例已经创建完成,数据观测和事件机制都已经初始化完成
        console.log('created hook triggered');
      },
      beforeMount: function() { // 模板已经编译完成,但是还没有挂载到页面中去
        console.log('beforeMount hook triggered');
      },
      mounted: function() { // 模板已经编译完成,挂载到页面中去了,此时可以访问到$el属性。
        console.log('mounted hook triggered');
      },
      beforeUpdate: function() { // 组件中的数据发生变化,但是DOM还没有重新渲染,此时可以对一些数据进行处理。
        console.log('beforeUpdate hook triggered');
      },
      updated: function() { // 组件中的数据发生变化,并且DOM已经重新渲染完成,此时可以对渲染后的数据进行处理。
        console.log('updated hook triggered');
      },
      beforeDestroy: function() { // 实例即将被销毁,此时可以进行一些善后工作,如取消定时器、取消事件监听等。
        console.log('beforeDestroy hook triggered');
      },
      destroyed: function() { // 实例已经被销毁,此时组件中的DOM元素也同时被销毁,无法再访问组件中的属性和方法。
        console.log('destroyed hook triggered');
      }
    });
  </script>
</body>
</html>

在这个代码中,每个生命周期的函数名都有对应的注释,方便查看每个钩子函数被触发的时间点。



扫描二维码,在手机上阅读

推荐阅读:

Vue-Router命名路由存在默认子路由的问题

Vue 中的监听器watch简介及使用方法

评 论