当前位置: 首页 > news >正文

Vue Router 钩子函数与组件生命周期执行顺序详解

Vue Router 钩子函数与组件生命周期执行顺序详解

一、Vue Router 核心钩子函数分类

Vue Router 提供了三类路由守卫(钩子函数),用于控制导航流程:

1. 全局守卫

  • router.beforeEach(to, from, next):全局前置守卫,导航触发前全局执行(所有路由跳转都会触发)
  • router.beforeResolve(to, from, next):全局解析守卫,所有组件内守卫和异步路由组件加载完成后执行
  • router.afterEach(to, from):全局后置钩子,导航完成后执行(无 next 参数,不影响导航流程)

2. 路由独享守卫

  • beforeEnter(to, from, next):配置在路由对象中的守卫,仅当进入该路由时触发(优先级高于组件内守卫)

3. 组件内守卫

  • beforeRouteEnter(to, from, next)进入当前组件对应路由前触发(此时组件实例未创建,无法访问 this
  • beforeRouteUpdate(to, from, next)当前组件路由参数变化时触发(如从 /user/123 跳转到 /user/456
  • beforeRouteLeave(to, from, next)离开当前组件对应路由前触发(常用于阻止用户未保存时离开)

二、Vue 组件生命周期钩子(关键阶段)

组件生命周期与路由导航强相关的钩子如下(按执行顺序):

  • beforeCreate:实例初始化前(数据观测和事件配置之前)
  • created:实例初始化完成(数据观测和事件配置完成,未挂载 DOM)
  • beforeMount:挂载开始前($el 为虚拟 DOM)
  • mounted:挂载完成(真实 DOM 渲染完毕)
  • beforeUpdate:数据更新前(虚拟 DOM 重新渲染前)
  • updated:数据更新后(虚拟 DOM 重新渲染完成)
  • beforeUnmount:实例卸载前(清理定时器、事件监听器等)
  • unmounted:实例卸载完成(所有子组件已卸载)

三、完整执行顺序流程(场景化说明)

场景 1:首次进入新路由(从 A 路由跳转到 B 路由,B 组件未加载过)

执行顺序:

  1. 全局前置守卫 router.beforeEach(导航开始)
  2. 路由独享守卫 B路由.beforeEnter(若配置)
  3. 组件内守卫 B组件.beforeRouteEnter(进入 B 前)
  4. 解析守卫 router.beforeResolve(B 组件及依赖加载完成)
  5. 全局后置钩子 router.afterEach(导航完成)
  6. B 组件生命周期beforeCreatecreatedbeforeMountmounted(组件挂载)

场景 2:路由更新(当前组件不变,参数变化,如 /user/123/user/456

执行顺序:

  1. 全局前置守卫 router.beforeEach(导航开始)
  2. 路由独享守卫 当前路由.beforeEnter(若配置)
  3. 组件内守卫 当前组件.beforeRouteUpdate(参数变化时)
  4. 解析守卫 router.beforeResolve(确认导航)
  5. 全局后置钩子 router.afterEach(导航完成)
  6. 组件生命周期beforeUpdateupdated(组件更新)

场景 3:离开当前路由(从 B 路由跳转到 C 路由)

执行顺序:

  1. 组件内守卫 B组件.beforeRouteLeave(离开 B 前,常用于阻止未保存操作)
  2. 全局前置守卫 router.beforeEach(导航开始)
  3. C 路由相关守卫(重复场景 1 流程)
  4. B 组件生命周期beforeUnmountunmounted(B 组件卸载)

四、总结表格

阶段钩子函数/生命周期触发时机
导航开始router.beforeEach所有路由跳转前
进入目标路由前目标路由 beforeEnter仅目标路由配置时触发
组件加载前目标组件 beforeRouteEnter组件实例创建前
依赖解析完成router.beforeResolve所有组件和异步资源加载完成后
导航完成router.afterEach路由跳转成功后
组件挂载beforeCreatemounted首次进入路由时组件初始化
路由参数更新组件 beforeRouteUpdate同组件路由参数变化时
组件更新beforeUpdateupdated数据变化导致重新渲染时
离开当前路由当前组件 beforeRouteLeave离开前(可阻止导航)
组件卸载beforeUnmountunmounted路由跳转后原组件销毁时

相关文章:

  • 【赵渝强老师】OceanBase的部署架构
  • GIT命令行的一些常规操作
  • HIS换代升级辅助脚手架:数据清洗、人员信息标准化、电子病历接口标准化、多模态影像接口标准化
  • 佰力博科技与您探讨DEAI介电阻抗分析仪的特点
  • 960g轻薄本,把科技塞进巧克力盒子
  • 数据分析学习笔记——A/B测试
  • PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums
  • : influxdb + grafana+JMeter
  • WHAT - 学习 WebSocket 实时 Web 开发
  • 【Redis】热点key问题,的原因和处理,一致性哈希,删除大key的方法
  • 单点登陆(SSO)简介-笔记
  • 用 Python 和 Rust 构建可微分的分子势能模型:深入解析 MOLPIPx 库
  • Redis 的内存回收机制
  • 资质评审周期压缩方案 实验室引入质检LIMS系统的关键步骤
  • 毫秒级数据采集的极致优化:如何用C#实现高性能、无冗余的实时文件写入?
  • 深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
  • 板凳-------Mysql cookbook学习 (八)
  • Ubuntu 24.04 LTS 和 ROS 2 Jazzy 环境中使用 Livox MID360 雷达
  • [AI voiceFFmpeg windows系统下CUDA与cuDNN详细安装教程]
  • vue-04(深入了解 props:验证、类型和默认值)
  • css3 网站/企业网站优化关键词
  • 如何在网站搜关键字/广州网络推广公司排名
  • 郑州定制网站推广工具/百度产品有哪些
  • 金蝶软件怎么打印凭证/长尾词seo排名
  • 在线购物的网站制作/seo主要做什么
  • 西安网站制作公司怎么选/超级推荐的关键词怎么优化