【Vue】Vue Router4x关于router-view,transtion,keepalive嵌套写法报错

警告问题

该警告是 Vue Router 4.x 的新规范,我们不能直接把 <router-view /> 放在 <keep-alive> 里。需要用 slot 语法包裹。

版本区别

VueRouter3

过去在 Vue 2 + Vue Router 3 中,我们可以直接这样写:

html 复制代码
<template>
  <div class="app-container">
      <keep-alive>
  			 <router-view/>
      </keep-alive>
  </div>
</template>
VueRouter4

但在 Vue Router 4 中,这样写会 报错或者无效,因为 <router-view> 不再直接渲染组件,而是通过插槽 (v-slot) 暴露出一个 Component(以及 route)来渲染。将 App.vue 的模板部分修改为如下:

html 复制代码
<template>
  <div class="app-container">
    <router-view v-slot="{ Component }">
      <keep-alive>
        <component :is="Component" />
      </keep-alive>
    </router-view>
  </div>
</template>

这样写就不会有警告,并且 keep-alive 能正常缓存页面。已将 <router-view /> 按官方推荐写法用 slot 语法和 <keep-alive> 包裹,警告会消失,页面缓存也能正常工作。所以无需再担心该警告。

🧩 可选:如果你只想缓存部分路由

比如只缓存某几个页面,可以配合 include:

html 复制代码
<router-view v-slot="{ Component }">
  <keep-alive include="Home,About">
    <component :is="Component" />
  </keep-alive>
</router-view>

注意:include 的值对应的是组件的 name 属性,而不是路由名。

⚙️ 进一步说明

<router-view> 现在是一个插槽组件,通过 v-slot 暴露 { Component, route }

这样做的好处是更灵活,你可以对路由组件进行过渡动画、缓存控制、条件渲染等操作:

html 复制代码
<router-view v-slot="{ Component, route }">
  <transition name="fade" mode="out-in">
    <keep-alive>
      <component :is="Component" :key="route.fullPath" />
    </keep-alive>
  </transition>
</router-view>
相关推荐
OpenTiny社区10 小时前
重磅预告|OpenTiny 亮相 QCon 北京,共话生成式 UI 最新技术思考
前端·开源·ai编程
前端老实人灬10 小时前
web前端面试题
前端
Moment11 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒11 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment11 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小码哥_常11 小时前
告别RecyclerView卡顿!8个优化技巧让列表丝滑如德芙
前端
小村儿11 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程
enoughisenough11 小时前
浏览器判断控制台是否开启
前端
Moment12 小时前
当前端开始做 Agent 后,我才知道 LangGraph 有多重要❗❗❗
前端·后端·面试
竹林81812 小时前
RainbowKit 快速集成多链钱包连接:从“连不上”到丝滑切换的踩坑实录
前端·javascript