vue生命周期钩子函数有那些

533 阅读3分钟

1.理解生命周期

一个人的从出生到死亡会有一个完整的周期,当然我们的vue也是会有一个生命周期。 生命周期主要分为四个阶段。

  • 创建前:beforeCreate,创建之后created。
  • 挂载前:beforeMount,挂载之后mounted。
  • 更新前:beforeUpdate,  更新后:updated。
  • 销毁前:beforeDestroy, 销毁后:destroyed。

2.探讨每一个生命周期的应用场景

  1. beforeCreate:vue实例创建初始化后methodswatch里的方法事件均未被初始化,在这里没什么事情可做,你可以在这时候加个loading动画。
  2. created:进行挂载数据,绑定事件(在项目中我感觉最经常使用的就是created,在进行挂载数据,绑点事件中出场率最高)主要进行一系列的数据的操作,你也可以在这里取消loading动画,注意此时的DOM还是虚拟的,无法进行操作。
  3. beforeMount:钩子调用时,开始找实例或者组件对应的模板,编译模板为虚拟 dom 放入到render函数中准备渲染,此时DOM还是无法操作
  4. mounted:钩子调用时,开始执行render ,渲染出真实dom,在这里操作真实的dom,依赖于DOM的代码可以放在这里。
  5. beforeUpdate: data发生变化时,在虚拟DOM更新补丁之前,这里适合在更新之前访问数据未被改变的 DOM。
  6. updated:data更改会导致虚拟 DOM 重新渲染和打补丁,此时调用updated钩子,这里可以访问数据更新之后的DOM
  7. beforeDestroy:在实例或组件被销毁之前,在beforeDestroy钩子被调用,此时实例仍然可用,在此钩子中调用methods中的事件,仍然会执行
  8. destroyed:在实例被销毁之后调用,此时,实例已完全被销毁,与其他实例的连接会被清理,指令和事件均会被解绑。
  9. errorCaptured:(2.5.0+ 新增)是组件的一个钩子函数,用于在组件级别捕获异常。当这个钩子函数返回 false 时,会阻止异常进一步向上冒泡,否则会不断向父组件传递 其实用的比较多的钩子函数主要的是created和mounted,created用来获取后台数据mounted用于dom挂载完后做一些dom操作。

IOQ`80GOAAT497JC[]~5H.png

3个人对于生命周期的独特见解

以我的个人理解,vue生命周期实际上和浏览器渲染过程是挂钩的,在beforecreate阶段,对浏览器来说,整个渲染流程尚未开始或者说准备开始,对vue来说,实例尚未被初始化,data observer和 event/watcher也还未被调用,在此阶段,对data、methods或文档节点的调用现在无法得到正确的数据。在created阶段,对浏览器来说,渲染整个HTML文档时,dom节点、css规则树与js文件被解析后,但是没有进入被浏览器render过程,上述资源是尚未挂载在页面上,也就是在vue生命周期中对应的created。eforeMount阶段,实际上与created阶段类似,节点尚未挂载,但是依旧可以获取到data与methods中的数据。在mounted阶段,对浏览器来说,已经完成了dom与css规则树的render,并完成对render tree进行了布局,而浏览器收到这一指令,调用渲染器的paint()在屏幕上显示,此时一个完整的页面已经能够显示在浏览器中。

A)ADOA@@QC7Y1KCMXAC0%RS.png

20210716122138897.png