【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>
相关推荐
毛骗导演8 分钟前
@tencent-weixin/openclaw-weixin 插件深度解析(四):API 协议与数据流设计
前端·架构
毛骗导演12 分钟前
@tencent-weixin/openclaw-weixin 插件深度解析(二):消息处理系统架构
前端·架构
IT_陈寒29 分钟前
深入理解JavaScript:核心原理与最佳实践
前端·人工智能·后端
MrGud34 分钟前
Cesium中的坐标系及其转换
前端·cesium
小付学代码35 分钟前
香港地图可编辑版
前端
兆子龙1 小时前
TypeScript高级类型编程:从入门到精通
前端·后端
SuperEugene1 小时前
Vue3 模板语法规范实战:v-if/v-for 不混用 + 表达式精简,避坑指南|Vue 组件与模板规范篇
开发语言·前端·javascript·vue.js·前端框架
IT_陈寒1 小时前
Python开发者的效率革命:这5个技巧让你的代码提速50%!
前端·人工智能·后端
Luna-player1 小时前
Vue 3 + Vue Router 的路由配置,简单示例
前端·javascript·vue.js
用户69371750013841 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能