最近在做的项目前段使用了Vue.js,在开发过程中对有关页面数据的初始化以及Vue的内置生命周期钩子的使用有些捉襟见肘,在查看了各大神的博客之后,决定自己总结一下~
先挂上官网的生命周期图示
说说什么是生命周期
我们先来看看百度百科给我们的介绍:生命周期就是指一个对象的生老病死。
很言简意赅,但这只是一个笼统的概念,当然,对于Vue来说,就只有生和死这两个状态,即Vue实例从创建到销毁的过程,就称作生命周期。
同时我们还要注意,在Vue的整个生命周期中,它提供了一系列的内置事件,即生命周期钩子函数(以下简称为钩子),我们可以在钩子里注册自己封装好的js方法,在Vue的生命周期中不同阶段触发这些方法,比如实现页面数据渲染,进行各种请求等等。注意,这些钩子里的this直接指向的是vue的实例。
让我们把官网的生命周期示例图翻译成中文来看看,到底Vue实例到底是怎么“生”又如何“死”:
每个钩子触发的阶段
beforeCreate:在Vue实例创建之前,数据观测(data observer) 和 event/watcher 事件配置之前触发。
created:Vue实例已经创建完成之后触发。此时实例已完成以下配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。此钩子通常用于初始化某些属性值。
beforeMount:在挂载开始之前被触发,相关的 render 函数首次被调用。
mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后触发该钩子。通常是初始化页面完成后,再对html的dom节点进行一些需要的操作,如数据的显示等等。
beforeUpdate:数据更新时触发,发生在虚拟dom重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated:在数据更改导致的虚拟 DOM 重新渲染和打补丁完成之后触发。
beforeDestroy:Vue实例销毁之前触发。但在这一步,实例仍然完全可用。
destroyed:Vue实例销毁后触发。在此之后,Vue 实例指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
created与mounted
在项目开发过程中最常使用的就是这两个钩子,根据上图我们能理解到:created钩子被触发时,html页面还未被渲染,仅仅只是Vue实例创建好了而已;而mounted钩子触发时html页面已经被渲染完成。
所以在开发过程中:
created钩子一般用于初始化一些基础的数据,如实体数据等等。
mounted钩子用于一些需要操作dom节点的方法,如图表插件echarts,初始化它们一般需要用到document.getElementById(“id”)这种形式,如果用在created中,html还未被渲染,页面是找不到这个节点的,在mounted中调用便可成功实现。