刚刚接触 vue 的时候,对于生命周期这个东西是真的懵懂,就是单存觉得这只是一种执行顺序,比如在页面初始化的需要请求的数据就需要放在 created 或者 mouted 里面,比如页面关闭前销毁数据 destroyed。一直个人觉得应该叫组件,????,毕竟 vue 是单页应用。
这次重新来看 vue 的生命周期,一方面是对于自己的一些理解的补充,一些是基于项目中带来的一些感知。
首先,beforecreated
在这个阶段 vue 里面的 data 与 dom 的结构都是未定义的状态,简单的理解可以认为,一个网页的初始化阶段。
遇到过一个问题,需要在这个阶段去拿数据,???? 第一眼瞬间有点迷,data 都是 undefined,怎么拿?其实这里面关系到 vue 的一个 api
,$nextTick()--> 关于这个东西,是因为 vue 是异步更新 dom 的,关于这个 api 可以说的貌似太多了,后续了解更多的时候继续吧。目前简单的记住上面,还是就是想要在 created 与 mouted. 里面需要操作 dom 的时候需要将其放入在这个 api 中,还有有一种方式定时器,通过异步的方式获取到数据。
想要通过同步的话,需要 this.$options.data,这个牵涉到框架设计原理了,个人了理解是,在这个特殊的时期之前,所有的 options 都会先存到 vm.$options 中,在 beforeCreate 之后,将 $options 里的 data 啦,props 啦,methods 啦等等一个个附到 vm 上,然后再触发 created 钩子。
还有一种就是 es6 的 promise 对象发送请求,从而得到数据。
第二个:created
在这个生命周期钩子中
data 已经出来了,但是 dom 结构依然没有定义好,那么就是说,有数据没元素节点,那么肯定不能渲染界面的
第三个:beforemouted
在这个时间点,界面的 dom 元素已经生成了。但是数据 data 是准备渲染的一个阶段,所以这个时间渲染界面不存在的,
第四个:mouted
这个时间点之前,元素也有了,数据也有了,那么,这个时间做的就是将数据 data 挂在 dom 上,就可可以渲染了。
第五个:beforeUpdate
这个时间点,页面已经初步渲染好了,但是数据被更新,所以需要重新渲染,重新获取到 data,再重新挂在 dom 元素上。所在在这个阶段,需要对数据做啥处理都可以,但是大多数时候,常常就在 mouted 里面就做了。
第六个:Updata 阶段
在这个阶段,数据更新完了,dom 重新渲染也会完成。
第七个:beforeDestroy
调用实例的 destroy()方法可以销毁当前的组件,在销毁前,会触发 beforeDestroy 钩子,
销毁前还可使得视图发生变更
第八个:destroyed
成功销毁之后,会触发 destroyed 钩子,此时该实例与其他实例的关联已经被清除,它与视图之间也被解绑。
此时在操作实例视图也不会再发生变更。
那么,说完了生命周期,大概总结一些诺
第一个阶段,啥也没有都是在准备
第二的时候,开始有 data
第三个阶段,开始生成 dom 元素
第四个阶段,就 data 挂到 dom 元素上
第五六个阶段,更新的数据的时候用到
第七八个阶段,销毁遇见(页面)的时候用到
一般数据请求放在第一个前四个阶段
根据实际而定吧。