详解Vue生命周期

5 篇文章 0 订阅

首先,Vue有哪些生命周期,这个是至少得掌握的。

beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed

详解每个生命周期的特点

  1. beforeCreate:组件实例刚被创建,组件的数据观测和初始化 props 已经完成,但是 $el 属性还没有被创建,因此无法访问组件中的 DOM 或其他子组件。
  2. created:组件实例已经创建,$el 属性已经被创建,但是 DOM 还没有被渲染出来。在这个阶段可以访问组件中的 props、data、methods 等属性。
  3. beforeMount:在这个阶段,Vue 将组件挂载到 DOM 上之前执行,所以此时组件的 $el 属性已经被创建,但是还没有被添加到 DOM 上。在这个阶段可以访问到组件的 $el 属性。
    beforeMount 钩子函数中,Vue 实例的 $el 属性已经指向了组件将要挂载的目标 DOM 元素,但是这个元素还没有真正添加到实际的 DOM 结构中。因此,通过访问 $el 可以获取到即将渲染的 DOM 元素,并且可以对元素进行操作,但是在此阶段如果依赖于其他已渲染的 DOM 元素,可能会得到空或不准确的结果。
  4. mounted:组件已经被挂载到 DOM 上,此时可以访问组件中的 DOM 元素,也可以对 DOM 进行操作。在这个阶段也可以访问到组件的 $refs 属性。
  5. beforeUpdate:在数据更新之前执行,在这个阶段可以对数据进行处理或者根据数据的变化进行操作。
  6. updated:在数据更新之后执行,在这个阶段可以访问组件中更新后的数据和 DOM 元素,也可以进行 DOM 操作。但是需要注意的是,在这个阶段不要修改数据,否则会进入无限循环。
  7. beforeDestroy:在组件销毁之前执行,在这个阶段可以进行一些清理工作,比如清除定时器、取消事件监听等。
  8. destroyed:组件已经被销毁,所有的事件监听和子组件已经被移除。在这个阶段组件已经不能被使用。

注释:

$el是什么?

$el 是 Vue 实例的一个属性,它表示 Vue 实例所管理的 DOM 元素。当 Vue 实例挂载到 DOM 上之后, $el 就会引用这个挂载的 DOM 元素。

在 Vue 组件中,如果在 beforeMountmounted 生命周期钩子函数中访问 $el 属性,就可以操作或访问组件挂载的 DOM 元素。例如,可以使用 jQuery 或原生 DOM API 对组件的 DOM 元素进行操作,或者在 mounted 生命周期钩子函数中调用第三方的 DOM 操作库。

需要注意的是,在组件的 beforeMount 钩子函数中,$el 属性的值是 undefined,因为此时组件的 DOM 元素还没有生成。在 mounted 钩子函数中,$el 属性的值才会被初始化为组件挂载的 DOM 元素。如果在组件实例化的过程中需要访问 $el 属性,可以在组件的 created 钩子函数中访问,此时 $el 属性的值也是 undefined

深入:

父子组件生命周期执行顺序:

  1. 父组件 beforeCreate 生命周期钩子函数执行。

  2. 父组件 created 生命周期钩子函数执行。

  3. 父组件 beforeMount 生命周期钩子函数执行。

  4. 子组件 beforeCreate 生命周期钩子函数执行。

  5. 子组件 created 生命周期钩子函数执行。

  6. 子组件 beforeMount 生命周期钩子函数执行。

  7. 子组件 mounted 生命周期钩子函数执行。

  8. 父组件 mounted 生命周期钩子函数执行。

  9. 父组件 beforeUpdate 生命周期钩子函数执行。

  10. 子组件 beforeUpdate 生命周期钩子函数执行。

  11. 子组件 updated 生命周期钩子函数执行。

  12. 父组件 updated 生命周期钩子函数执行。

  13. 父组件 beforeDestroy 生命周期钩子函数执行。

  14. 子组件 beforeDestroy 生命周期钩子函数执行。

  15. 子组件 destroyed 生命周期钩子函数执行。

  16. 父组件 destroyed 生命周期钩子函数执行。

需要注意的是,父组件和子组件的生命周期钩子函数是独立的,它们之间并没有直接的联系。此外,如果在父组件中使用了子组件,并且在父组件的生命周期钩子函数中调用了子组件的方法或者访问了子组件的属性,那么这些方法或属性的执行顺序会在对应的生命周期阶段执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值