欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3+Tsx給路由加切換動(dòng)畫(huà)時(shí)的踩坑及解決

 更新時(shí)間:2023年01月21日 08:47:00   作者:頭發(fā)掉完就不學(xué)了  
這篇文章主要介紹了Vue3+Tsx給路由加切換動(dòng)畫(huà)時(shí)的踩坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

項(xiàng)目場(chǎng)景

用最新的技術(shù)棧Vue+Tsx給后臺(tái)管理系統(tǒng)路由加動(dòng)畫(huà)時(shí),語(yǔ)法上與模板語(yǔ)法有些許不同,記錄下自己的踩坑記錄

樣式文件

新建文件transition.scss,這里用的是若依框架人家寫(xiě)好的樣式,寫(xiě)好之后在全局引入該樣式文件

// global transition css

/* fade */
.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.28s;
}

.fade-enter,
.fade-leave-active {
  opacity: 0;
}

/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
  transition: all 0.5s;
}

.fade-transform-enter {
  opacity: 0;
  transform: translateX(-30px);
}

.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(30px);
}

/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
  transition: all 0.5s;
}

.breadcrumb-enter,
.breadcrumb-leave-active {
  opacity: 0;
  transform: translateX(20px);
}

.breadcrumb-move {
  transition: all 0.5s;
}

.breadcrumb-leave-active {
  position: absolute;
}

步驟

首先是第一步嘗試給路由加過(guò)渡動(dòng)畫(huà),代碼如下

<div style={{ flex: "1", paddingTop: "12px", height: 0 }}>
<Transition name="fade-transform" mode="out-in">
? ? <RouterView ?v-slots={{
? ? ? ? default: ({ Component: RouteComponent }: { Component: any }) => {
? ? ? ? ? ? return <RouteComponent />
? ? ? ? }
? ? }}
? ? ></RouterView>
</Transition>
</div>

這時(shí)候路由完全沒(méi)動(dòng)畫(huà)并且報(bào)了一個(gè)警告

Component inside <Transition> renders non-element root node that cannot be animated.  

意思是在Transition動(dòng)畫(huà)節(jié)點(diǎn)下只能有一個(gè)根節(jié)點(diǎn),這時(shí)候再?lài)L試把RouteComponent外面套一層div

<div style={{ flex: "1", paddingTop: "12px", height: 0 }}>
<Transition name="fade-transform" mode="out-in">
? ? <RouterView ?v-slots={{
? ? ? ? default: ({ Component: RouteComponent }: { Component: any }) => {
? ? ? ? ? ? return <div><RouteComponent /></div>
? ? ? ? }
? ? }}
? ? ></RouterView>
</Transition>
</div>

這時(shí)候還是沒(méi)有切換動(dòng)畫(huà)的,新警告來(lái)了

<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>

意思是說(shuō)router-view不能放在transition下,好的那我們換一種寫(xiě)法試試

<div style={{ flex: "1", paddingTop: "12px", height: 0 }}>
? <RouterView v-slots={{
? ? ? default: ({ Component: RouteComponent }: { Component: any }) => {
? ? ? ? ? return <Transition name="fade-transform" mode="out-in">
? ? ? ? ? ? ? <div> <RouteComponent /></div>
? ? ? ? ? </Transition>
? ? ? }
? }}
? ></RouterView>
</div>

這時(shí)候就很完美,沒(méi)警告了。但是??王德發(fā)??切換動(dòng)效在哪里??我陷入了沉思,官方文檔里給的示例是切換顯示隱藏的時(shí)候用v-if,也就是隱藏的時(shí)候dom節(jié)點(diǎn)被銷(xiāo)毀了,是不是我這個(gè)沒(méi)重新渲染呢??這時(shí)候給div加上一個(gè)動(dòng)態(tài)的key讓它重新渲染就好了

import {useRoute } from 'vue-router';
const route = useRoute()
<div style={{ flex: "1", paddingTop: "12px", height: 0 }}>
? <RouterView v-slots={{
? ? ? default: ({ Component: RouteComponent }: { Component: any }) => {
? ? ? ? ? return <Transition name="fade-transform" mode="out-in">
? ? ? ? ? ? ? <div key={route.path}> <RouteComponent /></div>
? ? ? ? ? </Transition>
? ? ? }
? }}
? ></RouterView>
</div>

這時(shí)候就好了,雖然是可以了,但是這個(gè)any類(lèi)型讓我很是不舒服,本著一定要寫(xiě)代碼優(yōu)雅的原則,最后改動(dòng)一下

最終代碼

<div style={{ flex: "1", paddingTop: "12px", height: 0 }}>
<RouterView v-slots={{
? ? default: ?({ Component }: { Component: VNode }) => {
? ? ? ? return <Transition name="fade-transform" mode="out-in">
? ? ? ? ? ? <div key={route.path} style={{ height: "100%" }}>
? ? ? ? ? ? ? ? {createVNode(Component)}
? ? ? ? ? ? </div>
? ? ? ? </Transition>
? ? }
}}/>
</div>

這樣看著就舒服了

總結(jié)

最后想說(shuō),TSX真香!走新技術(shù)的路上難免會(huì)遇到很多坑,但解決了真的很舒服

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue表單實(shí)例代碼

    Vue表單實(shí)例代碼

    Vue.js 是用于構(gòu)建交互式的 Web 界面的庫(kù)。這篇文章主要介紹了Vue表單實(shí)例代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 如何修改vue-treeSelect的高度

    如何修改vue-treeSelect的高度

    這篇文章主要介紹了如何修改vue-treeSelect的高度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue2項(xiàng)目中如何使用clipboard復(fù)制插件

    vue2項(xiàng)目中如何使用clipboard復(fù)制插件

    這篇文章主要介紹了vue2項(xiàng)目中如何使用clipboard復(fù)制插件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue實(shí)現(xiàn)目錄樹(shù)結(jié)構(gòu)

    vue實(shí)現(xiàn)目錄樹(shù)結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)目錄樹(shù)結(jié)構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue通過(guò)axios調(diào)用json地址數(shù)據(jù)的方法

    Vue通過(guò)axios調(diào)用json地址數(shù)據(jù)的方法

    在現(xiàn)代Web開(kāi)發(fā)中,前后端分離已成為標(biāo)準(zhǔn)做法,Vue.js作為前端框架中的佼佼者,提供了豐富的API來(lái)處理數(shù)據(jù)和服務(wù)端的交互,其中一個(gè)常用的庫(kù)是axios,本文將詳細(xì)介紹如何在Vue項(xiàng)目中使用axios來(lái)調(diào)用JSON數(shù)據(jù),需要的朋友可以參考下
    2024-09-09
  • jenkins自動(dòng)構(gòu)建發(fā)布vue項(xiàng)目的方法步驟

    jenkins自動(dòng)構(gòu)建發(fā)布vue項(xiàng)目的方法步驟

    這篇文章主要介紹了jenkins自動(dòng)構(gòu)建發(fā)布vue項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn)

    VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn)

    本文主要介紹了VantUI封裝自定義Tabbar路由跳轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Vue的自定義事件之組件通信工具詳解

    Vue的自定義事件之組件通信工具詳解

    這篇文章主要介紹了Vue的自定義事件之組件通信工具詳解,Vue的自定義事件(Custom Events)是一種強(qiáng)大的工具,用于實(shí)現(xiàn)組件之間的通信和數(shù)據(jù)傳遞,本文將深入探討什么是Vue的自定義事件,以及如何自定義和使用它們,需要的朋友可以參考下
    2023-10-10
  • vuejs 制作背景淡入淡出切換動(dòng)畫(huà)的實(shí)例

    vuejs 制作背景淡入淡出切換動(dòng)畫(huà)的實(shí)例

    今天小編就為大家分享一篇vuejs 制作背景淡入淡出切換動(dòng)畫(huà)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳解Vue3中偵聽(tīng)器watch的使用教程

    詳解Vue3中偵聽(tīng)器watch的使用教程

    學(xué)過(guò) vue2 的小伙伴們肯定學(xué)習(xí)過(guò)偵聽(tīng)器,主要是用來(lái)監(jiān)聽(tīng)頁(yè)面數(shù)據(jù)或者是路由的變化,來(lái)執(zhí)行相應(yīng)的操作,在 vue3里面呢,也有偵聽(tīng)器的用法,功能基本一樣,本文就來(lái)為大家詳細(xì)講講
    2022-07-07

最新評(píng)論