vue | 生命周期篇

1.常用生命周期:四个阶段(创建、挂载、更新、销毁)

beforeCreate(){  //在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用
    console.log("beforeCreate")
},
created(){  //在实例创建完成后被立即同步调用
    console.log("created")
},
beforeMount(){  // 完成模板编译,虚拟dom已经创建完成,即将开始渲染
    console.log("beforeMount")
},
mounted(){  // Vue实例已经挂载在真实dom节点上,可以获取dom节点对dom进行操作
    console.log("mounted")
},
beforeUpdate(){  // 在数据发生改变后,DOM 被更新之前被调用
    console.log("beforeUpdate")
},
updated(){  // 在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用
        console.log("updated")
},
beforeDestroy(){  //实例销毁之前调用。在这一步,实例仍然完全可用
    console.log("beforeDestroy")
},
destroyed(){  //实例销毁后调用。实例都被销毁
    console.log("destroyed")
},

  ✎ 进入组件后执行的生命周期有:

        

        四个生命周期的对比关于(真实dom节点vm.$el和数据对象vm.$data):

        beforeCreate:  vm.$el和vm.$data都取不到

        created:vm.$el取不到 、vm.$data取得到 (组件实例创建完成,data数据已经被Object.defineProperty劫持完成,属性也绑定成功,但真实dom还没有生成,$el还不能用)

        beforeMount:vm.$el取不到 、vm.$data取得到

        mounted:vm.$el和vm.$data都取得到(el选项所对应的视图节点已经被新创建的vm.$el替换,并挂载到实例上。此时响应式数据都已经渲染完成了。)

       补充:在created中如何获取到dom:

      (让获取的dom在异步代码中获取的,如setTimeout、promise.xxx请求、

                使用this.$nextTick(function () {
                        // 仅在整个视图都被重新渲染之后才会运行的代码
                })

        )

        总结:对vm.$data做操作,在created生命周期以后就可以,因为此时根实例相关的属性都已准备完毕。

  ✎ 如果引入子组件后,执行的生命周期顺序:

        

         总结:先父组件beforeCreate、created、beforeMount  -  后子组件beforeCreate、created、beforeMount、mounted  最后父组件mounted

  ✎ 关于发送请求:

      ① 为什么不放在beforeCreate里:该钩子函数的data数据还没有挂载在vue对象身上,一般数据从后端返回都需要赋值给vue中的属性(data中挂载的)。

        另:若请求是在methods中封装好的,beforeCreate中调用是找不到该方法的,会报错。

      ②为什么不放在beforeMount或mounted  里: 这两个钩子发送请求会有点晚,增加页面的loading时间; vue的SSR不支持beforeMount和mounted钩子函数。

      ③发送请求在created还是mounted:根据具体需求来看。js加载顺序是先同步后异步。具体看生命周期的执行顺序来(如有子组件的情况下)。

       总结:发送请求建议放在created中,更快也有助于一致性。

2. 使用keep-alive时会增加两个生命周期

activated(){  //被 keep-alive 缓存的组件激活时调用
    console.log("activated")
},
deactivated(){ //被 keep-alive 缓存的组件失活时调用
    console.log("deactivated")
},

   ✎ 使用keep-alive包裹的组件在切换时不会被销毁,而是缓存到内存中并执行  deactivated 钩子函数;所以第一次进入组件页时会执行创建、挂载的两个阶段 + activated ,第二次进入时只执行 activated 。

3.  2.5.0+新增 (暂无业务场景)

errorCaptured:在捕获一个来自后代组件的错误时被调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值