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>

 

Logo

前往低代码交流专区

更多推荐