(自用面试题)Vue的生命周期是什么?

129 阅读2分钟

面试技巧:
要展开说,不能仅仅说那几个钩子函数。

Vue生命周期的定义

Vue实例从创建到销毁的过程就是Vue的生命周期,即指从创建、初始化数据、编译模板、挂载DOM→渲染、更新→渲染、卸载等一系列的过程。

Vue生命周期的阶段

它一共分四个阶段,不同阶段有不同的钩子函数:

  • 创建阶段
    • beforeCreate(组件实例创建之初)
      初始化好了一个Vue的空实例对象,上面只有默认的事件和生命周期,其他东西都未创建,data、methods、computed、watch都没有配置。
    • created(组件实例已经完全创建)
      data、methods、computed、watch都已经配置完成: 可以访问data中的数据;可以调用methods中的方法;可以通过computed和watch完成数据计算。
  • 挂载阶段
    • beforeMount(组件挂载到实例上去之前)
      Vue已经编辑了模板,将虚拟DOM转化成真实DOM,但并没有把它挂载到页面中。
    • mounted(组件挂载到实例上去之后)
      vm.$el已经创建完成,它生成的DOM替换了el选项所对应的DOM。
  • 更新阶段
    • beforeUpdate(组件数据更新之前)
      data虽然更新了,但是view层没有更新。
    • updated(组件数据更新之后)
      生成了新的虚拟DOM,它和老的虚拟DOM进行比较,找到两个虚拟DOM的最小差异后进行异步更新,然后再与真实DOM比较后对真实DOM更新。此时data和view层都是最新的。
  • 销毁阶段
    • beforeDestroy(组件实例销毁之前)
      data、methods、computed、watch仍能使用,还没有真正执行销毁的过程。
    • destroyed(组件实例销毁之后)
      移除了watcher、所有子组件、事件监听器。

此外还有一些特殊场景的生命周期:

  • 与keep-alive有关的两个特殊的钩子函数
    • activated(keep-alive缓存的组件激活时调用)
    • deactivated(keep-alive缓存的组件停用时调用)
      当组件被激活时,触发activated钩子函数;当组件被移除时,触发deactivated钩子函数。
  • 与组件异常捕获有关的一个钩子函数
    errorCaptured
    可以捕获一个来自子孙组件的错误。