Vue-生命周期

一、概念
每个Vue实例或组件从创建到显示再到废弃的过程就是vue的生命周期。很多时候我们希望能在这个过程中执行一些操作,于是就有了生命周期钩子。生命周期钩子函数允许我们在实例不同阶段执行各种操作,便于我们更好地控制和使用实例。


二、详解

放图:


Vue的生命周期分为三个阶段,8个钩子函数

研究方向:(1)data中的数据是否能够获取。(2)真实DOM是否能获取。

注意:钩子函数不要写成箭头函数,箭头函数可能会改变this指向



生命周期初始化阶段

1. beforecreate(实例被创建之前)

  • 不能获取数据,也不能获取真实DOM
  • 它可以在new Vue()创建实例出来的时候,做初始化事件和生命周期做准备,这些都是内部完成的。
  • 总结:这个钩子函数在项目中可以不用



2.create(实例被创建完成之后)

  • 可以获取数据,不能获取真实DOM
  • (1)初始化data选项,对data选项中的数据做数据劫持(用ES5的Object.defineProperty做getter和setter操作)
  • (2)对数据做计算、转换、修改等操作
  • 总结:数据请求,然后将请求的结果赋值给我们的数据。



3.beforeMount(组件挂载之前)

  • 可以获取数据,不能获取真实DOM
  • (1)组件挂载之前的准备工作

判断是否有el,若有el,再去判断是否有template。若有template,通过render函数将jsx渲染为VDOM,若没有el,可以使用$mount手动挂载。若没有template选项,使用outHTML手动写一个。

  • (2)可以对数据做计算、转换、修改等操作
  • 总结:数据请求,然后将请求的结果赋值给我们的数据。这个钩子函数让它处理内部事务,可以不用它。



4.mounted(组件挂载结束后)

表示组件挂载结束,也就是生成的html已经插入页面结束了

  • 数据可以获取,真实DOM也可以获取
  • 可以对数据做计算、转换、修改等操作


总结:在项目中,

  • 数据请求:created/mounted
  • DOM操作:mounted


面试题:

1. vue中数据请求往哪里写? 

            * 数据请求初始化阶段都可以写

            * 数据的修改写在后三个钩子

            * 一般往mounted里面写



生命周期更新阶段(数据改变触发)

5.beforeUpdate (更新之前)

  • 数据改变,重新生成vdom,然后通过diff算法得到patch补丁对象,自动完成任务

  • 总结:不操作



6.updated(更新结束)

更新结束,那么肯定已经获取真实DOM,也就是说我们可以做真实dom操作了


总结:这个阶段使用updated就行


组件的销毁阶段(组件被销毁触发)

外部销毁:开关【 v-if 】

内部销毁:调用   this.$destroy()

作用:自动删除事件以及监听

注意: 内部销毁组件会被删除,但是组件的真实dom外壳会被遗留

     * beforeDestroy

     * destroyed

这两个钩子函数没有差别,任意用一个即可







posted @ 2019-10-26 11:49  大把小米  阅读(327)  评论(0编辑  收藏  举报