vue 生命周期详细分析

本文详细解析Vue.js的生命周期,从初始化到销毁的各个阶段,包括beforeCreate、created、beforeMount、mounted等关键钩子函数的作用及应用场景。同时介绍了模板编译与数据响应性的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

new vue({})
1.Init events&lifecycle //只有默认的一些生命周期和默认的事件,此时的data,methods,el等等都不存在,还没有初始 化数据
什么是事件?什么是生命周期?vue api文档中事件有(on、once、off、emit四个方法),生命周期有(mount、forceUpdate、nextTick、destroy四个方法,其他那么多生命周期钩子应该也在这初始化的,要不然下一步的beforeCreate是哪里来的)

2.beforeCreate() //钩子函数运行,但是此时的vue是一个空壳。我们尝试使用beforeCreate函数输出data和methods中的数据是空的

初始化数据阶段
3.init injections&reactivity//在这个阶段已经初始化了数据和事件,包括data和methods,但是还没编译模板
injections理解这句首先需要知道什么是“依赖注入”,vue中有provide和inject,可以将父组件provide中的对象注入到子孙的属性中。这么说这个过程
reactive,就是将数据包装成一种可观测的类型,当数据产生变更的时候,我们能够感知到。这个操作后data数据应该就可以是响应的了。
4.created() //钩子函数运行,此时你可以使用created钩子函数获取到vue中初始化的数据
组件实例创建完成,属性已绑定,此时DOM还未生成 执行的钩子函数。

模板编译阶段
5.el或者template判断,如果没有template就render虚拟dom,(template相当于虚拟dom)
检查vue配置,即new Vue{}里面的el项是否存在,有就继续检查template项。没有则等到手动绑定调用vm.$mount()
检查配置中的template项,如果没有template进行填充被绑定区域,则被绑定区域的el对象的outerHTML
(即整个#app DOM对象,包括<div id=”app” >和</div>标签)都作为被填充对象替换掉填充区域。

6.beforeMount() //是位于编译模板阶段的钩子函数,在这里可以进行一般数据的获取和更改,同 created() 函数一样更改数据不会触发update和其他钩子函数,这个阶段是在内存中生成了虚拟DOM还没有挂载到页面中!!!
7.Create vm.$el and replace “el” with it-------之前是编译阶段,在内存中生成的是虚拟的DOM,还没挂载到页面上,编译模板阶段之后就是挂载阶段,此时在内存中的虚拟DOM挂载到了浏览器的页面上!
编译,并替换了被绑定元素;说白了就是我们用的模板语法被真实的数据替换了,比如html中的{{msg}}被替换了真实的数据。
8.mounted() //此时的vue实例已经被渲染到页面上,用户可以看到vue实例的页面,我们可以操作DOM等。

如果修改数据:
9.beforeUpdate() //更改data数据后,当虚拟DOM中的data发生改变时触发,此时虚拟DOM没有加载到页面上。页面上的数据不变,虚拟DOM中的数据改变。
10.updated()//更改data数据之后,虚拟DOM中的data发生改变页面上的data也发生改变(即新生成的虚拟DOM挂载上页面了)

11.beforeDestroy//销毁前执行的钩子函数,可以继续使用vue实例中的数据,如data,methods,filters,derictives等等。
12.destroyed已经销毁了,vue实例中的数据不可用了

actived keepalive组件激活时
deactived keepalive组件隐藏时 v-if="false"激活时
errorCaptured 捕获异常时
serverPrefetch’ SSR服务端渲染时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值