前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue-Router多级路由时,父组件重复加载的问题。

Vue-Router多级路由时,父组件重复加载的问题。

作者头像
房东的狗丶
发布2023-02-17 14:17:29
1.7K0
发布2023-02-17 14:17:29
举报
文章被收录于专栏:友人a的笔记丶

复现

代码中使用了两层路由,并且每层路由都使用了keep-alive,App.vue内初始代码如下:

代码语言:javascript
复制
<router-view v-slot="{Component}">
   <keep-alive>
       <component :is="Component" :key="$route.name"/>
  </keep-alive>
</router-view>

然后下级路由View.vue有三个子路由,View.vue代码同上。

一、问题描述

实际使用过程中发现分别加载view的三个子路由时,View.vue会初始化三次。然后就开始考虑问题出现原因存在的可能性。

  1.  Vue-Router Bug?显然不是。
  2.  keep-alive的缓存失效?除了这三次初始化,往后都正常,说明是重复加载 了三次。
  3. 确定是重复加载了,开始排查代码

keep-alive让组件被切换之后,组件不被销毁,同时component的key值保证组件的复用,而代码中的key使用的是路由名称,子路由的路由名称都是不相同的,也就导致了组件无法被正常复用。

二、解决办法

给父路由、子路由添加相同的元信息标识,作为key值,参考如下:

代码语言:javascript
复制
<router-view v-slot="{Component}">
     <keep-alive>
          <component :is="Component" :key="$route.meta.id"/>
     </keep-alive>
</router-view>

再次测试,一切Ok。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 复现
    • 一、问题描述
      • 二、解决办法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档