1.beforeCreate
使用频率较低,在实例创建以前调用,此时没有实例化,数据访问不到。
总结大佬们用到的地方:
可以做页面拦截。当进一个路由的时候我们可以判断是否有权限进去,是否安全进去,携带参数是否完整,参数是否安全。使用这个钩子好函数的时候就避免了让页面去判断,省掉了创建一个组建Vue实例。
可以做自定义重定向。当路由还没有进去时我们判断是否正确进去,若不正确进去可以重定向到指定的页面。
(ps他这里是不是想描述的是路由的beforEeach啊,没有试过。)
使用了路由的单页应用,想要在实例化之前尽早的做些事,设置个title什么的。
(这个可以有,聊胜于无吧)
2.created
当实例被创建后的钩子函数,也就是虚拟DOM被创建出来了,此时data已经初始化,可以获取数据和修改数据了
在这个钩子函数中常用来初始化一些数据,可是因为实例还未挂载,也就是说真实的DOM还未生成,此时并无法通过getElementById该类api获取真实DOM
看下官方文档的描述:
官方解释说created是在实例创建完成后被立即调用。在这一步,实例已完成以下配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el
属性目前不可见。
3.beforeMount
这个钩子函数还没用过,网站上大佬们也没见有什么更深的理解,大多都说和created没什么区别吧,后续待补充吧
4.mounted
最常用的钩子函数之一了,此时创建出来的虚拟DOM已经被挂载到页面上了,所以不仅可以获取到data数据,也可以自由操作页面上生成的节点啦。发送请求渲染页面一气呵成。如果调用了ref等api也是在这里才能获取到元素。
另外看别的大佬描述,在mounted之前的钩子函数中修改数据是不会触发updated beforeUpdate钩子函数的,在这里面修改才会触发。
5.beforeUpdate
该钩子函数会在视图层更新前调用,需要注意的是在该钩子函数中如果进行修改数据,并不会重新调用update钩子函数,因为虽然数据改变了,但是视图层并未改变。所以并不是data修改一定会导致update钩子调用,而是视图层修改了才会导致。
6.updated
和beforeUpdate同理,只会在视图层发生改变后调用,且此时已经处于更新完毕状态,视图层已经更新,所以不能在该钩子函数中进行数据改变,否则会造成死循环。(ps那如果只是赋值操作而不是++--这种还会一直触发吗?就是给data赋一个相同的值会触发吗)
7.beforeDestory
该钩子函数再组件销毁前被调用,此时实例还存在,可以清理非vue资源,防止内存泄露,比如销毁定时器,解绑全部指令及事件监听,清除全局事件,清除本地存储等
8.destoryed
此时vue实例已经卸载,无法获取到,所以用来清除一些全局比如windows上的事件,操作body,
由于EventBus不会凭空消失,所以需要销毁EventBus相关定义的事件,否则一直会以指数型方式触发 $emit。
销毁VueX中存储的数据,否则页面不刷新,在页面刚渲染时,一直展示的是上次的数据。
清空浏览器localStorage种植的某些变量。beforeDestroy 移除echarts的所有鼠标事件以及清空会话