Vue系列之vue生命周期详解

article/2025/9/1 14:42:48

文章の目录

  • 1、什么是 vue 生命周期
  • 2、生命周期钩子函数
    • 2.1、beforeCreate(创建前)
    • 2.2、created(创建后)
    • 2.3、beforeMount(挂载前)
    • 2.4、mounted(挂载后)
    • 2.5、beforeUpdate(更新前)
    • 2.6、updated(更新后)
    • 2.7、beforeDestroy(销毁前)
    • 2.8、destroyed(销毁后)
    • 2.9、activated(激活)
    • 2.10、deactivated(失活)
  • 3、示例
    • 3.1、不包含动态组件的生命周期
      • 3.1.1、父子组件加载的顺序如下图
      • 3.1.2、父子组件更新的顺序如下图
      • 3.1.3、父子组件销毁的顺序如下图
    • 3.2、包含动态组件的生命周期
      • 3.2.1、父子组件加载的顺序如下图
      • 3.2.2、切换动态组件的顺序如下图
      • 3.2.3、切换的组件都已加载完再次执行切换的顺序如下图
      • 3.2.4、父子组件的销毁顺序如下图
  • 写在最后


随着对 vue 的不断了解,会越来越发现它生命周期的重要性,只有了解了它的生命周期,才能在开发项目的时候,在逻辑上很好的判断什么时候该发生什么事件,即很好的控制页面。

1、什么是 vue 生命周期

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

在这里插入图片描述

2、生命周期钩子函数

2.1、beforeCreate(创建前)

在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用。此时组件的选项对象还未创建,el 和 data 并未初始化,因此无法访问 methods, data, computed 等上的方法和数据,一般在开发中很少使用。

2.2、created(创建后)

在实例创建完成后被立即同步调用。在这一步中,实例已完成对选项的处理,意味着以下内容已被配置完毕:数据侦听、计算属性、方法、事件/侦听器的回调函数。然而,挂载阶段还没开始,且 $el property 目前尚不可用,这是一个常用的生命周期,因为你可以调用 methods 中的方法,改变 data 中的数据,并且修改可以通过 vue 的响应式绑定体现在页面上,获取 computed 中的计算属性等等,通常我们可以在这里对实例进行预处理,也有一些 gym 喜欢在这里发 ajax 请求,值得注意的是,这个周期中是没有什么方法来对实例化过程进行拦截的,因此假如有某些数据必须获取才允许进入页面的话,并不适合在这个方法发请求,建议在组件路由钩子 beforeRouteEnter 中完成。

2.3、beforeMount(挂载前)

在挂载开始之前被调用:相关的 render 函数首次被调用。实例已完成以下的配置: 编译模板,把 data 里面的数据和模板生成 html,完成了 el 和 data 初始化,注意此时还没有挂在 html 到页面上。

该钩子在服务器端渲染期间不被调用。

2.4、mounted(挂载后)

实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。换句话说,挂在完成,也就是模板中的HTML渲染到HTML页面中,此时一般可以做一些 ajax 操作,mounted 只会执行一次。

注意:mounted 不会保证所有的子组件也都被挂载完成。如果你希望等到整个视图都渲染完毕再执行某些操作,可以在 mounted 内部使用 vm.$nextTick

该钩子在服务器端渲染期间不被调用。

2.5、beforeUpdate(更新前)

在数据发生改变后,DOM 被更新之前被调用。这里适合在现有 DOM 将要被更新之前访问它,比如移除手动添加的事件监听器。

该钩子在服务器端渲染期间不被调用,因为只有初次渲染会在服务器端进行。

2.6、updated(更新后)

在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。

注意,updated 不会保证所有的子组件也都被重新渲染完毕。如果你希望等到整个视图都渲染完毕,可以在 updated 里使用 vm.$nextTick

该钩子在服务器端渲染期间不被调用。

2.7、beforeDestroy(销毁前)

实例销毁之前调用。在这一步,实例仍然完全可用。

  • 这一步还可以用 this 来获取实例;
  • 一般在这一步做一些重置的操作,比如清除掉组件中的定时器和监听的 DOM 事件;

该钩子在服务器端渲染期间不被调用。

2.8、destroyed(销毁后)

实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。

该钩子在服务器端渲染期间不被调用。


在动态组件和异步组件中还有如下两个生命周期:

2.9、activated(激活)

被 keep-alive 缓存的组件激活时调用。

该钩子在服务器端渲染期间不被调用。

2.10、deactivated(失活)

被 keep-alive 缓存的组件失活时调用。

该钩子在服务器端渲染期间不被调用。

3、示例

3.1、不包含动态组件的生命周期

父组件

<template><div style="border: 1px solid red"><h1>GrandFather{{cname}}</h1><!-- <keep-alive><component v-bind:is="cname"></component></keep-alive> --><father v-if="isShow"></father><button @click="updateData">修改</button></div>
</template><script>
import Father from './Father.vue'
import Son from './Son.vue'export default {components: {Father,Son},data () {return {cname: 'grandfather',isShow: true}},beforeCreate () {console.log("beforeCreate")},created () {console.log("created")},beforeMount () {console.log("beforeMount")},mounted () {console.log('mounted')},beforeUpdate () {console.log('beforeUpdate')},updated () {console.log('updated')},activated () {console.log('activated')},deactivated () {console.log('deactivated')},beforeDestroy () {console.log('beforeDestroy')},destroyed () {console.log('destroyed')},errorCaptured () {console.log('errorCaptured')},methods: {updateData () {// this.cname = 'son'this.isShow = !this.isShow}}}
</script><style scoped>
</style>

子组件

<template><div style="border: 4px solid green"><h2>Father{{cname}}</h2><button @click="update">更新数据</button></div>
</template><script>export default {data () {return {cname: 'father'}},components: {},beforeCreate () {console.log("beforeCreate")},created () {console.log("created")},beforeMount () {console.log("beforeMount")},mounted () {console.log('mounted')},beforeUpdate () {console.log('beforeUpdate')},updated () {console.log('updated')},activated () {console.log('activated')},deactivated () {console.log('deactivated')},beforeDestroy () {console.log('beforeDestroy')},destroyed () {console.log('destroyed')},methods: {update () {this.cname = 'update father'this.$parent.cname = 'update grandfather'}}}
</script><style scoped></style>

3.1.1、父子组件加载的顺序如下图

在这里插入图片描述

3.1.2、父子组件更新的顺序如下图

在这里插入图片描述

3.1.3、父子组件销毁的顺序如下图

在这里插入图片描述

3.2、包含动态组件的生命周期

父组件

<template><div style="border: 1px solid red"><h1>GrandFather{{cname}}</h1><keep-alive><component v-bind:is="cname"></component></keep-alive><button @click="updateData">修改</button></div>
</template><script>
import Father from './Father.vue'
import Son from './Son.vue'export default {components: {Father,Son},data () {return {cname: 'father',isShow: true}},beforeCreate () {console.log("beforeCreate")},created () {console.log("created")},beforeMount () {console.log("beforeMount")},mounted () {console.log('mounted')},beforeUpdate () {console.log('beforeUpdate')},updated () {console.log('updated')},activated () {console.log('activated')},deactivated () {console.log('deactivated')},beforeDestroy () {console.log('beforeDestroy')},destroyed () {console.log('destroyed')},errorCaptured () {console.log('errorCaptured')},methods: {updateData () {this.cname = this.cname === 'son' ? 'father' : 'son'}}}
</script><style scoped>
</style>

子组件①

<template><div style="border: 4px solid green"><h2>Father{{cname}}</h2><button @click="update">更新数据</button></div>
</template><script>export default {data () {return {cname: 'father'}},components: {},beforeCreate () {console.log("beforeCreate")},created () {console.log("created")},beforeMount () {console.log("beforeMount")},mounted () {console.log('mounted')},beforeUpdate () {console.log('beforeUpdate')},updated () {console.log('updated')},activated () {console.log('activated')},deactivated () {console.log('deactivated')},beforeDestroy () {console.log('beforeDestroy')},destroyed () {console.log('destroyed')},methods: {update () {this.cname = 'update father'this.$parent.cname = 'update grandfather'}}}
</script><style scoped></style>

子组件②

<template><div style="border: 1px solid blue"><h3>Son</h3></div>
</template><script>export default {data () {return {}},beforeCreate () {console.log("beforeCreate")},created () {console.log("created")},beforeMount () {console.log("beforeMount")},mounted () {console.log('mounted')},beforeUpdate () {console.log('beforeUpdate')},updated () {console.log('updated')},activated () {console.log('activated')},deactivated () {console.log('deactivated')},beforeDestroy () {console.log('beforeDestroy')},destroyed () {console.log('destroyed')},methods: {}}
</script><style lang="scss" scoped>
</style>

3.2.1、父子组件加载的顺序如下图

在这里插入图片描述
如果没有指定动态组件,动态组件的相关生命周期是不走的。

3.2.2、切换动态组件的顺序如下图

在这里插入图片描述
外层组件进行更新操作,内层组件在切换的组件处于挂载前阶段时,要被替换的组件才执行deactivated,然后才执行切换的组件的后续生命周期。

3.2.3、切换的组件都已加载完再次执行切换的顺序如下图

在这里插入图片描述

3.2.4、父子组件的销毁顺序如下图

在这里插入图片描述
当前的先销毁,已经被替换的依次执行销毁。

写在最后

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!


http://chatgpt.dhexx.cn/article/uCm0ZShh.shtml

相关文章

Vue的生命周期详解(简单易懂)

一、定义 Vue的生命周期就是实例从创建到销毁的一个过程&#xff0c;即从创建、初始化数据、编译模板、挂载Dom->渲染、更新->渲染&#xff0c;卸载等一系列的过程。 写代码时注意&#xff1a; Vue的生命周期钩子函数会自动绑定this上下文到实例中&#xff0c;这意味着…

【Vue】 Vue生命周期详解

每一个vue实例从创建到销毁的过程&#xff0c;就是这个vue实例的生命周期。在这个过程中&#xff0c;它经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。 通过这张流程图已经可以清晰的看到Vue整个生命周期的过程 beforeCreate( 创建前…

Vue极简教程,生命周期详解

Vue | 渐进式 | JS框架 | 极简教程 生命周期详解

vue实例的生命周期详解

Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期。 官网中的长图诠释了Vue实例从创建&#xff0c;运行到销毁的整个过程。从vue实例的创建&#xff0c;运行&#xff0c;销毁期间&#xff0c;总是伴随着各种各样的事件&#xff0c;这些事件统称为生命周期…

【Vue生命周期详解】

细谈Vue声明周期 什么是生命周期&#xff1f;Vue的生命周期beforeCreate( 创建前 )&#xff1a;created ( 创建后 &#xff09;&#xff1a;beforeMount&#xff1a;mounted&#xff1a;beforeUpdate&#xff1a;updated&#xff1a;beforeDestroy&#xff1a;destroyed&#x…

VUE的十一个生命周期详解

生命周期可以分为三个阶段&#xff1a; 挂载阶段 更新阶段 销毁阶段 创建前&#xff1a;beforeCreate() 无法获取data数据 创建后&#xff1a;created() 可以获取data数据和操作methods 但不能使用DOM 挂载前&#xff1a;beforeMount() 挂载后&#xff1a;mounted() …

Vue生命周期和钩子函数详解

Vue生命周期和钩子函数详解 Vue生命周期介绍&#xff1a; 组件每个阶段它的内部构造是不一样的&#xff0c;所以一般特定的钩子做特定的事&#xff0c;比如Ajax获取数据就可以在mounted阶段。从Vue实例被创建开始到该实例最终被销毁的整个过程叫做VUE的生命周期&#xff0c;在…

vue生命周期详解(一)----创建期间的生命周期函数

文章目录 vue生命周期一、beforeCreate1.在beforeCreate函数里面调用data里面的属性2.在beforeCreate钩子函数里面调用methods里面的方法 二、created生命周期钩子函数1.在created钩子函数里面调用methods里面的方法和data里面的属性 三、beforeMount和mountedbeforeMount生命周…

Vue中组件生命周期过程详解

一、什么是生命周期&#xff1f; Vue中的生命周期是指&#xff1a;组件从创建到销毁的一个过程&#xff0c;在这过程中&#xff0c;我们在每个特定阶段会触发一些方法&#xff08;这些方法具备一些功能&#xff09;&#xff0c;我们给这些方法起了名字叫做(生命周期钩子函数/组…

vue生命周期详解和使用场景整理

我们从vue的原理上来理解一下vue的生命周期&#xff0c;以及使用场景&#xff08;使用场景应该试很多新手同学比较懵的地方&#xff09;&#xff0c;建议有条件的同学可以看一下vue源码&#xff0c;更能深入理解。 不看源码的同学也没有关系&#xff0c;我们从业务场景切入&…

vue生命周期钩子函数详解

先放一张官网生命周期图&#xff1a; vue有8种生命周期函数&#xff1a; 钩子函数触发的行为在此阶段可以做的事情beforeCreadtedvue实例的挂载元素$el和数据对象data都为undefined&#xff0c;还未初始化。加loading事件createdvue实例的数据对象data有了&#xff0c;$el还…

Vue的生命周期详解

Vue的生命周期 Vue的生命周期就是vue实例从创建到销毁的全过程&#xff0c;也就是 new Vue() 开始就是vue生命周期的开始。Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom-->渲染、更新-->渲染、卸载 等一系列过程&#xff0…

Vue的生命周期函数详解

Vue有一个完整的生命周期&#xff0c;也就是从开始创建&#xff0c;初始化创建&#xff0c;编译模板&#xff0c;挂载Dom&#xff0c;渲染–>更新–>渲染&#xff0c;销毁等一系列过程&#xff0c;我们称之为Vue的生命周期。通俗的说就是Vue实例从创建到销毁的过程&#…

vue 生命周期 详解

详解Vue Lifecycle 先来看看vue官网对vue生命周期的介绍 Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程&#xff0c;我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程&#xff…

【vue2】vue生命周期的理解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;vue生命周期的介绍、vue生命周期钩子函数详解&#xff0c;vue生命周期的执行顺序 目录 …

Vue生命周期详解(图解)

程序员学习必备书籍推荐&#xff1a; 首先我们对Vue生命周期官方给出的图进行详细解释 vue生命周期详细图解 什么是生命周期? 简而言之:从生到死的过程,从Vue实例创建-运行-销毁的过程 Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载…

vue的生命周期详解:从入门到精通

Vue生命周期 在学习vue的过程中&#xff0c;vue的生命周期可谓是重中之重&#xff0c;必学的一部分。 每个 Vue 实例在被创建时都要经过一系列的初始化过程&#xff0c;例如&#xff0c;需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过…

Vue生命周期(图示详解)

首先让我们先来看一张图示&#xff0c;图片很长不要紧&#xff0c;我们一步一步慢慢来看。 Vue官方生命周期图示 一旦创建Vue实例&#xff0c;就会产生很多个环节。 &#x1f4a6;把整张图片拆分成一小块一小块的去看&#xff0c;首先看第一个部分&#xff1a; &#x1f4a6;In…

【vue系列-05】vue的生命周期(详解)

深入理解vue的生命周期 一&#xff0c;vue的生命周期1&#xff0c;创建流程1.1&#xff0c;beforeCreate1.2&#xff0c;created 2&#xff0c;挂载流程2.1&#xff0c;beforeMount2.2&#xff0c;mounted 3&#xff0c;更新流程3.1&#xff0c;beforeUpdate3.2&#xff0c;upd…

Vue的生命周期的详解

Vue的生命周期 Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识&#xff0c;以此作为记录。 Vue的生命周期就是vue实例从创建到销毁的全过程&#xff0c;也就是new Vue() 开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期&#xff0c;也就是从开始创建、初…