1. Vue Router 的导航守卫有哪些?分别用于什么场景
Vue Router 的导航守卫可以分为三类:全局守卫、路由独享守卫和组件内守卫
全局守卫中,beforeEach 会在每次路由跳转开始时最先执行,常用于登录状态校验、权限判断和路由白名单控制。如果不满足条件,可以中断或重定向导航。beforeResolve 会在所有守卫执行完成、组件渲染之前触发,适合依赖最终路由状态的逻辑,例如精确埋点或确认跳转结果。afterEach 在路由跳转完成后执行,不能中断导航,一般用于页面访问统计、修改 document.title 等纯副作用操作。
路由独享守卫通过在路由配置中使用 beforeEnter 定义,只对某一个路由生效,适合某些页面有特殊权限或前置条件判断的场景,避免将逻辑写进全局守卫。
组件内守卫定义在组件内部,包括 beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave。进入组件前可以做数据校验或权限确认,离开组件时常用于表单未保存的离开提示。
面试话术
Vue Router 的守卫用于控制路由跳转流程,全局守卫适合通用的权限和登录控制,路由独享守卫适合单页面特殊逻辑,组件内守卫更关注页面级生命周期和用户操作控制。
2. Pinia / Vuex 的核心概念?为什么需要集中式状态管理?
Pinia 和 Vuex 都是 Vue 的集中式状态管理方案,其核心目的是在多个组件之间共享状态,并保证数据流清晰、可控。
核心概念包括 State、Getter、Action 和 Mutation(Vuex 中)。State 用于存储全局共享数据,Getter 用于派生状态,类似计算属性,Action 负责处理业务逻辑和异步操作,在 Vuex 中最终通过 Mutation 修改状态。Pinia 去除了 Mutation 的概念,直接在 Action 中修改 State,使模型更加简单直观。
集中式状态管理的价值在于避免多组件之间通过层层 props 或事件传递共享数据,统一管理全局状态,使数据来源清晰、修改路径可追踪,有利于大型中后台项目的维护和扩展。
面试话术
在复杂应用中,状态往往会被多个组件依赖,集中式状态管理可以统一管理这些全局状态,减少组件耦合,提升可维护性。Pinia 相比 Vuex 设计更轻量,使用组合式 API,更符合 Vue3 的开发习惯。