【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>
相关推荐
IT_陈寒19 分钟前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
天外飞雨道沧桑28 分钟前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
柳杉36 分钟前
用 Codex 完成智慧高速 3D 可视化大屏,从 18 张行业设计稿到可交互的运行监测中心
前端·ai编程·数据可视化
review445431 小时前
拿到 codex 第一步
前端·agent·vibecoding
鶴哥只手遮天1 小时前
jQuery 4.0 源码架构与工程实践-第 01 章 · 全景与工程结构:一个 20 岁库的自省
前端·javascript·jquery
徐小夕1 小时前
doc2docx方案,开源!
前端·vue.js·github
徐小夕1 小时前
JitOFD:一款面向信创与档案场景的 Web 端 OFD 编辑器
前端·vue.js·github
孟健2 小时前
Kimi K3.1 Pro 编程实测:3个月27万行代码,每年1.7万预算下如何9分钟修好顽固Bug
前端·开源·ai编程
inksci2 小时前
在线编辑表格,功能强大,json互转
前端·javascript·html
咩咩啃树皮2 小时前
JavaScript 中 this 指向为什么总在变?
开发语言·前端·javascript