多路由复用页面组件问题

简介: 多路由复用页面组件问题

场景复现


项目中经常会遇到增改查的需求,通常采用不同的路由指向同一个页面组件,以此到达复用页面的功能,但是复用页面存在一些状态问题。


以下情况均不缓存页面:


分两种情况,均为动态路由匹配


  • (1) 路由a: /detail/1, 路由b: /detail/2 。   路由表里匹配/detail/:id
  • (2) 路由A: /new-detail/1, 路由B: /edit-detail/1 。 路由表里匹配/new-detail/:id, 和  /edit-detail/:id


这四个不同的url,注册的是同一个页面组件


在场景(1)中,切换页面,只调用beforeRouteUpdate钩子函数,不调用beforeRouteEnter、mounted等,可以监听到$route,并获取到激活组件里面的数据,不会错乱


在场景(2)中,切换页面,调用beforeRouteEnter钩子函数,不调用created、mounted等生命周期钩子


beforeRouteUpdate重用的组件官方解释(指的是动态路由匹配)


在当前路由改变,但是该组件被复用时调用,举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1/foo/2 之间跳转的时候


动态路由匹配


文档请看这里


响应路由参数的变化


当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。


复用组件时,想对路由参数的变化作出响应的话,有两种方法


  1. watch (监测变化) $route 对象


  1. 使用 2.2 中引入的 beforeRouteUpdate 导航守卫


使用beforeRouteUpdate的时候,如果路由里面通布尔模式props: true将组件和路由解耦,这个时候会出现props获取错误的情况,比方说从/foo/1页面切换到/foo/2页面的时候,在beforeRouteUpdate获取到的还是失活页面组件的id

image.png

beforeRouteUpdate钩子中,在next回调函数中编写代码并没有执行,仿佛没有调用,但是去掉next(),路由就不会放行,有点奇怪。需要阅读源码实现逻辑...


完整的导航解析流程


  1. 导航被触发
  2. beforeRouteLeave(失活组件里调用) 可以访问组件实例 this
  3. beforeEach(全局前置钩子)
  4. beforeRouteUpdate(如果是重用组件,则调用) 可以访问组件实例 this
  5. beforeEnter(路由配置里,路由独享的)
  6. 解析异步路由组件(如果有)
  7. beforeRouteEnter(被激活组件里调用)
  8. beforeResolve(全局解析守卫)
  9. 导航被确认
  10. afterEach(全局后置钩子)
  11. 触发 DOM 更新。
  12. beforeRouteEnter (调用守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。next(vm) => {})


接着调用created、mounted等等

目录
打赏
0
0
0
0
4
分享
相关文章
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
环境异常解决方案-CentOS安装软件包找不到镜像
  今天准备搭建一套Docker环境,先安装了一个CentOS 7.2的虚拟机,然后使用【yum】命令来装其他的软件包,出现了如下消息: Loaded plugins: fastestmirror, langpacks One of the ...
2315 0
Wrk压测发送Post请求的正确姿势
这篇文章是关于如何使用Wrk工具进行HTTP基准测试的指南,包括Wrk的安装、基本用法、执行Get和Post请求的示例,以及在进行Post请求测试时正确设置Lua脚本的重要性。
643 1
返回按钮——没有上一页的URL时,跳转到首页(document.referrer的妙用)
返回按钮——没有上一页的URL时,跳转到首页(document.referrer的妙用)
165 0
|
10月前
element el-table 设置fixed导致行错乱问题
文章讨论了在使用Element UI的`el-table`组件时,设置固定列(`fixed`)导致行错乱的问题,并提供了解决方案。问题产生的原因是当表格底部有滚动条而固定列底部没有滚动条时,行无法对齐。解决办法是在表格中设置`padding-bottom`的内边距与滚动条高度相等,确保固定列和非固定列的行能够对齐。
2128 0
onActivated 生命周期的使用和介绍
onActivated 生命周期的使用和介绍
583 3
JS严格校验身份证号-(严格校验每一位身份号码)
JS严格校验身份证号-(严格校验每一位身份号码)
507 0
前端新趋势?有了Web Component,还用纠结Vue或React?
Web Component 的概念最早在 2011 年被 Google 提出,并在 2018 年 V1 版本开始被主流浏览器所支持(除了 IE)。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问