一 、vue的生命周期是什么
vue每个组件都是独立的,每个组件都有一个属于它的生命周期,从一个组件创建
、挂载
、更新
、销毁
,这就是一个组件所谓的生命周期
附加一个vue官方的 【vue生命周期钩子】链接
创建: beforeCreate created
挂载:beforeMount mounted
修改:beforeUpdate updated
卸载:beforeDestroy destroyed
二、生命周期执行顺序
单组件生命周期:
beforeCreate => created => beforeMount => mounted => beforeUpdate => updated => beforeDestroy => destroyed
父子组件创建
顺序:在父组件挂载完成之前先挂载子组件
父beforeCreate => 父created => 父beforeMount => 子beforeCreate =>子created => 子beforeMount =>子 mounted => 父mounted
父子组件更新
顺序:在父组件更新完成之前先挂载子组件
父beforeUpdate => 子beforeUpdate => 子updated => 父updated
父子组件卸载
顺序:在父组件卸载完成之前先挂载子组件
父beforeDestroy => 子beforeDestroy => 子destroyed => 父destroyed
三、各个生命周期的作用
beforeCreate:
在此阶段,实例刚在内存中被创建出来。此时,data的数据和methods中方法的都还没有初始化,数据和模板均获取不到
created:
在此阶段,实例已经在内存中创建完成。data 和 methods、computed都已经被初始化好了,如果要调用 methods 中的方法,或者操作 data 中的数据,最早可以在这个阶段中操作。此生命周期为最早可进行ajax异步数据请求的生命周期,服务端渲染也可在此进行
beforeMount:
执行到这个钩子的时候,在内存中已经编译好了模板了,相关的render函数首次被调用(虚拟DOM),但是还没有挂载到页面中,此时,页面还是旧的
mounted:
执行到这个钩子的时候,就表示Vue实例已经初始化完成了。此时组件脱离了创建阶段,进入到了运行阶段。 如果我们想要通过插件操作页面上的DOM节点,最早可以在和这个阶段中进行,mounted只会执行一次
。
beforeUpdate:
当执行这个钩子时,页面中的显示的数据还是旧的,data中的数据是更新后的, 页面还没有和最新的数据保持同步,不会触发附加地重渲染过程
updated:
调用时,组件DOM已经更新,页面显示的数据和data中的数据已经保持同步了,都是最新的 。所以可以执行依赖于DOM的操作,然后在大多是情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环,该钩子在服务器端渲染期间不被调用
beforeDestory:
Vue实例从运行阶段进入到了销毁阶段,这个时候上所有的 data 和 methods , 指令, 过滤器 ……都是处于可用状态。还没有真正被销毁,此时还是可以访问实例的属性
- 这一步还可以用this来获取实例,
- 一般在这一步做一些重置的操作,比如清除掉组件中的定时器 和 监听的dom事件
destroyed:
调用后,Vue 所有的 data 和 methods , 指令, 过滤器 ……都是处于不可用状态,所有的事件监听器会被移除,所有的子实例也会被销毁。
四、vue中内置的方法 属性和vue生命周期的运行顺序
props => methods =>data => computed => watch;