Vue 基础-3

690 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言

吃饱饭才有力气写代码~

Vue基础-2 中我们介绍了组件相关知识点,今天我们来理一理Vue的生命周期,之前面试的时候遇到过好多次这个问题,现在来搞搞清楚!

生命周期

首先来了解一下什么是生命周期:Vue的每个组件都有自己的生命周期,具体来说就是从这个组件被创建开始,经历数据初始化,挂载,更新,到最终被销毁;这一整个过程就是所谓的生命周期! Vue官网的示意图如下:

3.png

从上至下依次是:

  • 构造函数生成 Vue 实例;
  • 事件和生命周期钩子初始化;
  • beforeCreate 在实例初始化之后,data observer(数据观测) 和事件配置之前被调用,这个时候组件的选项对象还没有创建,el 和 data 还没有初始化。这个时候还不能访问methods、data、computed 等数据和方法!
  • 初始化 inject provide state 属性;
  • created 实例已经创建完成之后被调用;data 已经初始化、计算属性、event/watch事件回调、但dom 树并未挂载;这个时候可以调用methods里的方法,改变data中的数据,并且修改可以通过 Vue 的响应式绑定展现在页面上!
  • 是否有 el 对象;
  • 没有就挂载;
  • 是否有模板;
  • 有就把模板转化为 render 函数,通过render函数进行dom树的创建和渲染;
  • 没有模板就编译el对象,把外层html作为模板;
  • beforeMounted 在挂载开始前被调用,render函数首次被调用生成虚拟dom;也就是说实例已经完成了以下的配置:编译了模板,把data里的数据和模板生成了html,完成了el和data的初始化;但是还没有挂到html页面上!
  • 创建Vue 实例下的$el,并替换真正的dom;
  • mounted 挂载完成,dom树已经渲染到页面,可以进行dom操作;
  • beforeUpdate 数据有更新被调用
  • 虚拟dom重新渲染补丁
  • updated 数据已经更新完
  • beforeDestroy 实例销毁之前调用,在这之前还可以访问实例的数据
  • 清除 watcher、子组件、事件监听器等
  • destroyed 组件销毁后调用
  • 组件已经被销毁

具体每一个钩子函数的效果,可以通过编写代码查看!