Vue中常用钩子函数(生命周期、路由拦截等)执行顺序

一、生命周期函数

  1. beforeCreated : 完成Vue实例化对象的创建,this能访问到当前实例化对象,但this.$data访问不到当前组件data定义的数据
  2. created: model数据层初始化,data,props设置数据劫持,methods代理在vue实例上,computed,watch封装成不同类型的watcher,this.$data能够访问到定义的数据和方法
  3. beforeMount: 将template模板编译成render函数,进行dom渲染,此时未挂载到$el控制的dom元素上
  4. mounted: 将渲染好的dom元素,挂载到$el控制的dom元素,即替换掉项目入口文件index.html中id值为app的div。(注:所涉及页面的dom操作都必须在此钩子函数里执行,在这里dom渲染、挂载完成才能获取到dom元素,但不一定保证所有dom渲染完成,为什么这样说呢?例如:实际开发中,我们都会在created里进行数据初始化工作,调取接口数据,拿到接口数据进行页面用到的data数据更改等工作,因接口请求是异步的,故页面部分静态内容渲染完成时,一些需要等到接口拿到数据后才能去渲染到页面内容可能为完成,即在mounted时还在等待接口是否请求完成,此刻需要接口数据的页面元素dom是为渲染的,获取不到会报错,于是就有个API应运而生,一般在mounted里进行dom操作,我们会在dom操作外层加上如下api,它的作用就是保证所有dom渲染完成才会执行

this.$nextTick( () => { dom操作 } )

  1. beforeUpdate: 只要对页面有影响的数据有改变,都会执行该钩子
  2. updated: 数据改变导致对应页面dom元素重新渲染完成后执行,无论是组件本身的数据变更,还是从父组件接收到的 props 或者从vuex里面拿到的数据变更,都会触发重新渲染dom,并在之后调用 updated。可参考下面官方图,数据更新所出现的循环图在这里插入图片描述
  3. beforeDestroy: 组件销毁前执行
  4. destroyed: 组件销毁后执行
    (注:路由注册中设置keep-alive: true 即缓存的页面没有7、8两个销毁生命周期,会多出10、11两个生命周期)
  5. activated: 当前缓存页面路由激活时执行,即每次进入当前路由都会执行
  6. deactivated: 当前缓存页面路由停用时执行,即每次离开当前路由都会执行

二、路由拦截

  1. beforeRouteEnter: 进入路由前执行,提交当前路由路径时立即执行,进入的路由对应组件未开始实例化、加载等工作,获取实例对象需要在next( vm => { vm })里获取,vm相当于this指向当前组件实例化对象
  2. beforeRouteLeave: 离开路由前执行

三、执行顺序

缓冲页面(keep-alive:true)

  1. 初次进入页面
    beforeRouteEnter(next()外) → beforeCreate → created → beforeMount → beforeRouteEnter( next()内 ) → mounted → activated → (离开页面时): beforeRouteLeave → deactivated
  2. 再次进入页面
    beforeRouteEnter( next()外 ) → beforeRouteEnter( next()内 ) → activated

未缓存页面

beforeRouteEnter(next()外) → beforeCreate → created → beforeMount → beforeRouteEnter( next()内 ) → mounted → beforeRouteLeave → (离开页面时): beforeRouteLeave → beforeDestroy → destroyed

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue生命周期钩子函数执行顺序如下: 1. beforeCreate: 在实例初始化之后,数据观测和事件配置之前被调用。此时,组件的属性和方法还未初始化。 2. created: 在实例创建完成后被立即调用。此时,组件的属性已经完成初始化,但DOM还未生成,无法访问到el选项。 3. beforeMount: 在挂载开始之前被调用。此时,模板编译已经完成,但还未将挂载的DOM替换为真实的DOM。 4. mounted: 在挂载完成后被调用。此时,组件已经被挂载到DOM上,可以访问到挂载的DOM元素。 5. beforeUpdate: 数据更新时,DOM重新渲染之前被调用。此时,组件的数据已经更新,但DOM还未重新渲染。 6. updated: 数据更新且DOM重新渲染完成后被调用。此时,组件的数据已经更新,并且DOM已经重新渲染。 7. beforeDestroy: 在实例销毁之前被调用。此时,组件还未被销毁,仍然可以访问到组件的数据和方法。 8. destroyed: 在实例销毁之后被调用。此时,组件已经被销毁,无法再访问到组件的数据和方法。 需要注意的是,父组件和子组件的生命周期钩子函数执行顺序是先父后子。也就是说,父组件的钩子函数会在子组件的钩子函数之前被调用。例如,父组件的created钩子函数会在子组件的created钩子函数之前被调用。这样可以确保父组件在子组件之前完成一些初始化的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue常见面试题:Vue生命周期以及父子组件钩子函数执行顺序?(超详细)](https://blog.csdn.net/weixin_53934815/article/details/129092938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Vue钩子函数以及父组件的8个钩子和子组件的8个钩子的先后执行的顺序](https://blog.csdn.net/m0_57262819/article/details/124653331)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值