vue的生命周期和父子组件的执行顺序

1.vue的生命周期

Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom =>渲染、更新 =>渲染、卸载等一系列过程,称这是Vue的生命周期。
官方目前给出的生命周期一共有9个

  1. beforeCreate(创建前)︰数据观测和初始化事件还未开始,此时data的响应式追踪、event/watcher都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据
  2. created(创建后)︰实例创建完成,实例上配置的options包括data、computed、watch、methods 等都配置完成,但是此时渲染得节点还未挂载到DOM,所以不能访问到$el属性
  3. beforeMount(挂载前)︰在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。此时还没有挂载html到页面上。
  4. mounted(挂载后)︰在el被新创建的vm.$el替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互
  5. ** beforeUpdate(更新前)**︰响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实DOM还没有被渲染
  6. updated(更新后)︰在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。此时DOM已经根据响应式数据的变化更新了。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  7. beforeDestroy(销毁前)︰实例销毁之前调用。这一步,实例仍完全可用, this 仍能获取到实例。
  8. destroyed(销毁后)︰实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。
  9. errorCaptured(错误捕获) 2.5.0+ 新增
    在捕获一个来自后代组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

生命周期示例图

点击打开放大查看
在这里插入图片描述

另外还有keep-alive独有的生命周期,分别为activated和**deactivated **。用keep-alive包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行deactivated 钩子函数,命中缓存渲染后会执行activated钩子函数。

2.vue父组件和子组件执行顺序

加载渲染过程:
1.父组件 beforeCreate
2.父组件created
3.父组件beforeMount
4.子组件beforeCreate
5.子组件created
6.子组件beforeMount
7.子组件mounted
8.父组件mounted

更新过程:
1.父组件beforeUpdate
2.子组件 beforeUpdate
3.子组件updated
4.父组件updated

销毁过程:
1.父组件beforeDestroy
2.子组件 beforeDestroy
3.子组件destroyed
4.父组件destoryed

3.一般在哪个生命周期请求异步数据

我们可以在钩子函数created、beforeMount、mounted 中进行调用,因为在这三个钩子函数中,data已经创建,可以将服务端端返回的数据进行赋值。
推荐在created 钩子函数中调用异步请求,因为在created钩子函数中调用异步请求有以下优点:·

  • 能更快获取到服务端数据,减少页面加载时间,用户体验更好;
  • SSR不支持beforeMount ,mounted钩子函数,放在created中有助于一致性。

4. keep-alive中的生命周期哪些

  • keep-alive是Vue提供的一个内置组件,用来对组件进行缓存——在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
  • 如果为一个组件包裹了keep-alive,那么它会多出两个生命周期: deactivated、activated。同时,beforeDestroy和destroyed 就不会再被触发了,因为组件不会被真正销毁。
  • 当组件被换掉时,会被缓存到内存中、触发deactivated生命周期;当组件被切回来时,再去缓存里找这个组件、触发activated钩子函数。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值