美文网首页
知识 | Vue生命周期

知识 | Vue生命周期

作者: LuckyJin | 来源:发表于2020-07-14 17:30 被阅读0次

    vue生命周期

    1、什么阶段才能调用DOM
    在钩子函数 mounted 被调用前,Vue 已经将编译好的模板挂载到页面上,所以在 mounted 中可以访问操作 DOM。

    2、什么阶段能发起请求
    可以在钩子函数created、beforeMount、mounted 中进行调用,因为在这三个钩子函数中,data 已经创建,可以将服务端端返回的数据进行赋值。

    但是推荐在 created 钩子函数中调用异步请求

    因为在 created 钩子函数中调用异步请求有以下优点:

    • 能更快获取到服务端数据,减少页面loading 时间;
    • ssr不支持 beforeMount 、mounted 钩子函数,所以放在 created 中有助于一致性;

    生命周期四个阶段

    初始化 (create)— 组件挂载(mount)—–组件更新 (update)— 销毁(destroy)

    生命周期 发生了什么
    beforeCreate 初始化界面前 :在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问
    created 初始化界面后: 在实例创建完成后发生,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据, 在这里更改数据不会触发updated函数,也就是不会更新视图,SSR可以放这里。
    beforeMount 挂载前 :完成模板编译,虚拟Dom已经创建完成,即将开始渲染。在此时也可以对数据进行更改,不会触发updated
    mounted 挂载完成 :将编译好的模板挂载到页面 (虚拟DOM挂载) ,可以在这进行异步请求以及DOM节点的访问,在vue用$ref操作
    beforeUpdate 更新数据前 :组件数据更新之前调用,数据都是新的,页面上数据都是旧的 组件即将更新,准备渲染页面 , 可以在当前阶段进行更改数据,不会造成重渲染
    updated 组件更新后render重新渲染 , 此时数据和界面都是新的 ,要注意的是避免在此期间更改数据,因为这可能会导致无限循环的更新
    beforeDestroy 组件卸载前 : 实例销毁之前,在当前阶段实例完全可以被使用,我们可以在这时进行善后收尾工作,比如清除计时器
    destroyed 组件卸载后 : 组件已被拆解,数据绑定被卸除,监听被移出,子实例也统统被销毁。
    activited keep-alive 专属 , 组件被激活时调用
    deactivated keep-alive 专属 , 组件被销毁时调用

    父组件和子组件之间的生命周期执行顺序

    组件的调用顺序都是先父后子,渲染完成的顺序是先子后父
    组件的销毁操作是先父后子,销毁完成的顺序是先子后父

    加载渲染过程 子组件在父组件的beforeMount和Mounted之间渲染

    父beforeCreate->父created->父beforeMount
    ->子beforeCreate->子created->子beforeMount->子mounted
    ->父mounted
    

    子组件更新过程

    父beforeUpdate->子beforeUpdate->子updated->父updated
    

    父组件更新过程

    影响到子组件:- 父beforeUpdate -> 子beforeUpdate->子updated -> 父updted
    不影响子组件:- 父beforeUpdate -> 父updated
    

    销毁过程

    父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
    

    原文地址

    相关文章

      网友评论

          本文标题:知识 | Vue生命周期

          本文链接:https://www.haomeiwen.com/subject/bgyfhktx.html