路由与状态管理

加载中... 浏览

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 通过更轻量的设计与对组合式 API 的原生支持,显著提升了状态定义的直观性与开发效率,是现代 Vue 项目的首选方案。

留言板

加载评论中...
Vue 组件与通信
Vue 生命周期钩子函数
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1