Vue生命周期详解

时间:2024-10-07 09:54:56

目录

前言:

一、生命周期流程图详解

、Created

2.编辑模板过程

、Mounted

、Updated

、Destroyed

二、生命周期代码

1.父子组件加载生命周期

2.父子组件更新生命周期

3.父子组件销毁生命周期


前言:

1、什么是vue生命周期?

Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

2、vue生命周期的作用是什么?

让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

3、vue生命周期总共有几个阶段?

它可以总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后

4、第一次页面加载会触发哪几个钩子?

第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子

5、DOM 渲染在 哪个周期中就已经完成?

DOM 渲染在 mounted 中就已经完成了。

一、生命周期流程图详解

、Created

2.编辑模板过程

、Mounted

、Updated

、Destroyed

二、生命周期代码

老规矩,先展示生命周期的执行效果

当点击button控件跳转后,befoeCreate、ceeated、beforeMount和mounted就已经执行了。在添加事件就会更新展示beforUpdate和updated;退出这个界面就执行销毁bdfoeDestroy、destroyed。

展示代码:

  1. <template>
  2.   <div>
  3.     <div class="label-head">
  4.       <label>生命周期详解</label>
  5.     </div>
  6.     <div :data="count">{{count}}</div>
  7.     <p>
  8.       <button @click="add">添加</button>
  9.     </p>
  10.   </div>
  11. </template>
  12. <script>
  13. export default {
  14.   data() {
  15.     return {
  16.       count"",
  17.       filter"all",
  18.       states: ["all""active""completed"]
  19.     };
  20.   },
  21.   methods: {
  22.     add() {
  23.       this.count++;
  24.     }
  25.   },
  26.   beforeCreate() {
  27.     console.log("=========" + "beforeCreated:初始化之前" + "======");
  28.     console.log(this.$el);
  29.     console.log(this.$data);
  30.     console.log(this.filter);
  31.   },
  32.   created() {
  33.     console.log("==========" + "created:创建完成" + "===========");
  34.     console.log(this.$el);
  35.     console.log(this.$data);
  36.     console.log(this.filter);
  37.   },
  38.   beforeMount() {
  39.     console.log("==========" + "beforeMount:挂载之前" + "=======");
  40.     console.log(this.$el);
  41.     console.log(this.$data);
  42.     console.log(this.filter);
  43.   },
  44.   mounted() {
  45.     console.log("==========" + "mounted:被挂载之后" + "==========");
  46.     console.log(this.$el);
  47.     console.log(this.$data);
  48.     console.log(this.filter);
  49.   },
  50.   beforeUpdate() {
  51.     console.log("========" + "beforeUpdate:数据更新前" + "========");
  52.     console.log(this.$el);
  53.     console.log(this.$data);
  54.     console.log(this.filter);
  55.   },
  56.   updated() {
  57.     console.log("========" + "updated:被更新之后" + "============");
  58.     console.log(this.$el);
  59.     console.log(this.$data);
  60.     console.log(this.filter);
  61.   },
  62.   beforeDestroy() {
  63.     console.log("=========" + "beforeDestroy:销毁之前" + "========");
  64.     console.log(this.$el);
  65.     console.log(this.$data);
  66.     console.log(this.filter);
  67.   },
  68.   destroyed() {
  69.     console.log("==========" + "destroyed:销毁之后" + "===========");
  70.     console.log(this.$el);
  71.     console.log(this.$data);
  72.     console.log(this.filter);
  73.   },
  74.   activated() {
  75.     console.log("");
  76.   },
  77.   deactivated() {
  78.     console.log("");
  79.   }
  80. };
  81. </script>
  82. <style scoped>
  83. .label-head {
  84.   text-align: center;
  85.   font-size40px;
  86. }
  87. </style>

整体的函数知道后,遇到父子组件时他们的函数是如何执行的呢?

1.父子组件加载生命周期

父组件:parents

子组件:child、grandson

  1. /*parents的打印代码*/
  2. created () {
  3.     ('============"parents created":我第一============')
  4.   },
  5.   beforeMount () {
  6.     ('============"parents befortemounted"我第二=======')
  7.   },
  8.   mounted () {
  9.     ('============"parents mounted"我第九==============')
  10.   },
  11.   /*child的打印代码*/
  12. created () {
  13.     ('----------------"child created"我第三-------------')
  14.   },
  15.   beforeMount () {
  16.     ('----------------"child beforemounted"我第四-------')
  17.   },
  18.   mounted () {
  19.     this.$(this)
  20.     ('----------------"child mounted"我第七-------------')
  21.   },
  22.   /*grandson的打印代码*/
  23. created () {
  24.     ('~~~~~~~~~~~~~"grandson created"我第五~~~~~~~~~~~~~')
  25.   }
  26.   beforeMount () {
  27.     ('~~~~~~~~~~~"grandson beforemounted"我第六~~~~~~~~~')
  28.   },
  29.   mounted () {
  30.     ('~~~~~~~~~~~~"grandson mounted"我第八~~~~~~~~~~~~~~')
  31.   }

执行顺序:

第一圈:先执行父组件的created和beforemount函数;created和beforeMount再按子组件的使用顺序执行,

第二圈:折回去执行mounted,先子后父!

结论:

父组件准备挂载还没挂载时,子组件先完成挂载;

最后父组件再挂载!

2.父子组件更新生命周期

  1. /*parents的销毁代码*/
  2.   beforeDestroy () {
  3.     ('============"parents beforDestroy"我第一=======')
  4.   },
  5.   destroyed () {
  6.     ('============"parents destroyed"我第四==========')
  7.   },
  8.   /*child的销毁代码*/
  9.   beforeDestroy () {
  10.     ('------------"child beforDestroy"我第二-------')
  11.   },
  12.   destroyed () {
  13.     ('------------"child destroyed"我第三-----------')
  14.   },

执行顺序:

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

3.父子组件销毁生命周期

  1. /*parents的销毁代码*/
  2.   beforeDestroy () {
  3.     ('============"parents beforDestroy"我第一=======')
  4.   },
  5.   destroyed () {
  6.     ('============"parents destroyed"我第四==========')
  7.   },
  8.   /*child的销毁代码*/
  9.   beforeDestroy () {
  10.     ('------------"child beforDestroy"我第二-------')
  11.   },
  12.   destroyed () {
  13.     ('------------"child destroyed"我第三-----------')
  14.   },

执行顺序:

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed