Vue生命周期

111 阅读2分钟

什么是 vue 生命周期

Vue 有⼀个完整的⽣命周期,从开始创建、初始化数据、编译模版、挂载Dom(渲染)更新( 渲染)、卸载 等过程称之为Vue⽣命周期。

Vue2生命周期

beforeCreate:创建前

实例初始化之后,数据观测和事件配置之前被调用,此时组件未创建选项的对象,
el 和data 未初始化,无法访问methods, data, computed等上的方法和数据		

created:创建前后

实例创建完成之后被调用,实例已经完成以下的配置:数据观测,
属性和方法的运算,watch/event事件回调,$el属性目前不可见。

beforeMount:数据挂载前

数据挂在开始之前调用,相关的render函数首次被调用(虚拟DOM)
实例已完成配置: 编译模板,把data里面的数据和模板生成html,
完成了el和data 初始化(该钩子未在html页面挂载)

mounted:数据挂载后

挂在完成,数据渲染到html中,该周期可以做一些数据请求,mounted只会执行一次

beforeUpdate:数据更新前

在数据更新之前被调用,发生在虚拟DOM重新渲染和打补丁之前,
可以在该钩子中进一步地更改状态,不会触发附加地重渲染过程

  update:数据更新后

数据更新后执行,尽量避免在此期间更改状态,因为这可能会导致更新无限循环,
该钩子在服务器端渲染期间不被调用

   beforeDestroy:销毁前

在实例销毁之前调用,一般在这一步做一些重置的操作,比如清除掉组件中的定时器 和 监听的dom事件

destroyed:销毁后

在实例销毁之后调用,调用后,所以的事件监听器会被移出,
所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用

通过配置项的形式使用生命周期钩子

<!-- demo.vue -->
<template>
  <h2>Vue2 and Vue3 生命周期</h2>

  <div>总合:{{ sum }}<button @click="sum++">点击累加</button></div>
</template>
<script>
import { ref } from "vue";
export default {
  setup() {
    let sum = ref(0);
    return {
      sum,
    };
  },
  // 创建前
  beforeCreate() {
    console.log("====== beforeCreate:创建前 =======");
  },
  // 创建前后
  created() {
    console.log("====== created:创建前后 =======");
  },
  // 数据挂载前
  beforeMount() {
    console.log("====== beforeMount:数据挂载前 =======");
  },
  // 数据挂载后
  mounted() {
    console.log("====== mounted:数据挂载后 =======");
  },
  // 更新前
  beforeUpdate() {
    console.log("====== beforeUpdate:更新前 =======");
  },
  // 更新后
  updated() {
    console.log("====== updated:更新后 =======");
  },

  beforeUnmount() {
    console.log("====== beforeUnmount:销毁前 =======");
  },
  // 组件销毁后
  unmounted() {
    console.log("====== unmounted:销毁后 =======");
  },
};
</script>

<style>
</style>

<!-- app.vue -->
<template>
  <div @click="isShow = !isShow">隐藏/显示</div>
  <demo v-if="isShow" />
</template>

<script>
import { ref } from "vue";

import demo from "@/view/compostions/demo.vue";

export default {
  name: "App",
  components: {
    demo,

  },
  setup() {
    let isShow = ref(true);
    return {
      isShow,
    };
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
  font-size: 20px;
  line-height: 40px;
}
</style>

在这里插入图片描述

Vue3生命周期

vue2--vue3生命周期变化 在这里插入图片描述 通过组合式API的形式去使用生命周期钩子

<!-- demo.vue -->
<template>
  <h2>Vue2 and Vue3 生命周期</h2>
  <div>总合:{{ sum }}<button @click="sum++">点击累加</button></div>
</template>
<script>
import {
  ref,
  onBeforeMount,
  onMounted,
  onBeforeUpdate,
  onUpdate,
  onBeforeUnmount,
  onUnmount,
} from "vue";
export default {
  setup() {
    let sum = ref(0);
    onBeforeMount(() => {
      console.log("====onBeforeMount===");
    })
    onMounted(() => {
      console.log("====onMounted===");
    })
    onBeforeUpdate(() => {
      console.log("====onBeforeUpdate===");
    })
    onUpdate(() => {
      console.log("====onUpdate===");
    })
    onBeforeUnmount(() => {
      console.log("====onBeforeUnmount===");
    })
    onUnmount(() => {
      console.log("====onUnmount===");
    })
    return {
      sum,
    };
  },
};
</script>

<style>
</style>

在这里插入图片描述