美文网首页
解决warn:Vue 3 – rend

解决warn:Vue 3 – rend

作者: 不忘初心_d | 来源:发表于2022-01-10 12:29 被阅读0次

    1.出现这个warn的背景,请看代码:

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

    2.问题原因分析:
    由于:is="Component"属性会使所有的组件都渲染在这里,而外层是transition 虚拟组件,也就是说所有组件都会包裹在它里面,这是不允许的。

    3.解决方案,推荐方案3:
    -- 1.给每个组件分别加根节点div包裹起来:

    <template>
      <div class="about">
        <h1>This is an about page</h1>
        <button @click="toPath('/test')">去测试页面看看</button>
      </div>
    </template>
    

    -- 2.

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

    -- 3.最优方案:

    <router-view v-slot="{ Component, route }">
      <transition name="fade" mode="out-in">
        <div :key="route.name">  
          <component :is="Component"></component>
        </div>
      </transition>
    </router-view>
    

    end:给出最终完整版,可以实现页面切换转场动画和缓存

    <template>
      <router-view v-slot="{ Component }">
        
          <transition :name="$router.customRouterData.transitionName">
            <keep-alive>
            <div :key="$route.name">
                <component
                :is="Component"
                v-if="$route.meta.keepAlive"
              />
            </div>
            </keep-alive>
          </transition>
        
          <transition :name="$router.customRouterData.transitionName">
          <div  :key="$route.name">
              <component
              :is="Component"
              v-if="!$route.meta.keepAlive"
            />
          </div>
          </transition>
        
      </router-view>
    </template>
    
    export default {
      name: "app",
      setup() {
        return {};
      },
    };
    </script>
    <style lang="scss">
    #app {
      position: relative;
      width: 100%;
      height: 100%;
    }
    
    .slide_left-enter-active,
    .slide_left-leave-active,
    .slide_right-enter-active,
    .slide_right-leave-active {
      transition: all 0.3s;
      position: absolute !important;
      background-color: white;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      z-index: 1;
    }
    
    .slide_left-enter-from,
    .slide_right-leave-to {
      opacity: 1;
      transform: translateX(100%);
    }
    
    .slide_right-enter-from,
    .slide_left-leave-to {
      opacity: 1;
      transform: translateX(-100%);
    }
    
    .slide_left-leave-to,
    .slide_right-leave-to {
      opacity: 0.3;
    }
    </style>
    
    

    相关文章

      网友评论

          本文标题:解决warn:Vue 3 – rend

          本文链接:https://www.haomeiwen.com/subject/iblsxrtx.html