vue3问题--[Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep

本文介绍了在 Vue3 中遇到的关于 router-view 不能直接在 transition 或 keep-alive 内使用的警告,以及如何通过使用 slot props 的方式来解决该问题。同时,修复后的代码导致了另一个关于非元素根节点无法动画的错误,这个问题通过在组件模板中添加一个包裹元素得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

router-view can no longer be used directly inside transition or keep-alive

 

代码

<transition name="router-fade" mode="out-in">
  <keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
</transition>
<transition name="router-fade" mode="out-in">
  <router-view v-if="!$route.meta.keepAlive"></router-view>
</transition>

提示信息

[Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep-alive>.
Use slot props instead:

<router-view v-slot="{ Component }">
  <transition>
    <component :is="Component" />
  </transition>
</router-view>

修正

<router-view v-slot="{ Component }">
  <transition name="router-fade" mode="out-in">
     <keep-alive>
       <component :is="Component"/>
     </keep-alive>
  </transition>
</router-view>

又报另外一个错误Vue 3 – <Transition> renders non-element root node that cannot be animated

组件页面中最外层还是要有个根节点包裹

<template>
  <!-- 添加home-container的div就能解决上述报错 -->
  <div class="home-container">
    <h2>{{ state }}</h2>
    <button @click="testToRaw">测试toRaw</button>
    <button @click="testMarkRaw">测试markRaw</button>
  </div>
</template>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值