官方生命周期流程图:
生命周期钩子函数:
选项式 API | Hook inside setup | 调用时机 |
---|---|---|
beforeCreate | Not needed* | vue实例初始化之前调用 |
created | Not needed* | vue实例初始化之后调用 |
beforeMount | onBeforeMount | 挂载到DOM树之前调用 |
mounted | onMounted | 挂载到DOM树之后调用 |
beforeUpdate | onBeforeUpdate | 数据更新之前调用 |
updated | onUpdated | 数据更新之后调用 |
beforeUnmount | onBeforeUnmount | vue实例销毁之前调用 |
unmounted | onUnmounted | vue实例销毁之后调用 |
在页面渲染之前,有两次修改数据的机会:created和beforeMount钩子,但是都不会重新渲染页面,只是修改了数据(会在updated钩子执行前被重新渲染)。建议初始化的请求都放在这两个钩子里面(请求是异步的,放在这两个钩子能够更快地被执行完)。执行mounted的时候,页面已经渲染完毕,如果没有数据的变更的话,那么页面已经完全展示了。所以,我们在created和beforeMount请求的数据,会在updated执行之前被vue识别到数据的变化,然后重新渲染页面。
那么,假如我们的项目是调用三方登陆界面,成功登陆后才重定向到我们的页面中,这个时候就需要了解生命周期了。如果控制得不好,就会出现我们系统的主页一闪而过,才跳转到登陆界面的情况。这种情况对于用户来说体验是很不好的。如何去处理呢?
答案是将登陆放到App.vue中,在没有渲染页面的时候,就已经先一步跳转到登陆界面,登陆过后立即跳转到我们的后台。
如果要优先跳转到路由页面而非App.vue呢?
由于发送到后台的验证登陆的方法是异步的,那么无论我们把方法放到created,beforeMount,还是mounted钩子中,都不会导致页面立即跳转到登陆界面。这时候,可以用一个false的标记控制页面,当login过后就重新渲染页面,把我们的页面展示出来,虽然会有一瞬间的空白,但是在体验上面没有什么异样的感觉,比瞬间闪我们系统的页面好太多。
当然,最好的方法肯定是集成我们自己的登陆,通过守卫路由的方式去监控用户有没有登陆。