Skip to content

Vue的生命周期


Vue2生命周期图

面试:简述Vue的生命周期以及每个阶段做的事?

思路:

  1. 列举生命周期各阶段
  2. 结合实践,阐述整体流程
  3. 如果有把握自我扩展,Vue3中setup的执行时机,SSR时的生命周期。
  4. 父子组件创建时生命周期的执行顺序(问了再答)

回答:

  1. Vue的生命周期主要有8个

    • 组件实例创建前后beforeCreatecreated

    • 组件实例挂载前后beforeMountmounted

    • 组件数据更新前后beforeUpdateupdated

    • 组件实例销毁前后beforeDestroydestroyed,Vue3中改成了beforeUnmountunmounted

    • 如果有keep-alivekeep-alive缓存的组件激活时会触发activated,停用时触发deactivated

    • (不用答)冷门钩子:errorCapturedrenderTrackedrenderTriggeredserverPrefetch

  2. 日常开发中,我们会在不同的生命周期做不同的事情,回答如下:XX阶段,XX

    • beforeCreate:通常用于执行一些初始化任务,比如插件初始化之类的

    • created:组件初始化完毕,可以访问$data,获取接口数据等

    • mounted:挂载完毕,可以访问$elmounted不会保证所有的子组件都被挂载完成。如果希望等到整个视图都渲染完毕再执行某些操作,可以在mounted内部使用vm.$nextTick

    • beforeUpdate:视图层还未更新,可用于获取更新前各种状态

    • updated:视图层的更新完成,可以获取到最新的状态。updated不会保证所有的子组件也都被重新渲染完毕。如果希望等到整个视图都渲染完毕,可以在updated里使用vm.$nextTick

    • beforeDestroy:实例被销毁前调用,可用于一些定时器或订阅的取消

    • destroyed:销毁一个实例。可清理它与其它实例的连接,解绑它的全部指令及事件监听器

  3. Vue3setup在最前面执行,看官方文档的生命周期图就知道了,如果是在服务端渲染SSR时,只有beforeCreatecreated可用,其他和DOM操作相关的生命周期都无法使用,Nuxt.js项目中一般在created阶段请求数据

  4. 父子组件的生命周期顺序(规律:正常顺序,父组件留一手,等子组件都处理完,父组件最后再收尾)

    • 加载渲染过程:父beforeCreate→父created→父beforeMount→子beforeCreate→子created→子beforeMount→子mounted→父mounted
    • 更新过程:父beforeUpdate→子beforeUpdate→子updated→父updated
    • 销毁过程:父beforeDestroy→子beforeDestroy→子destroyed→父destroyed

相关链接:Vue2的生命周期