最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3+Tsx給路由加切換動畫時的踩坑及解決

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

項目場景

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

樣式文件

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

// 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;
}

步驟

首先是第一步嘗試給路由加過渡動畫,代碼如下

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

這時候路由完全沒動畫并且報了一個警告

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

意思是在Transition動畫節(jié)點下只能有一個根節(jié)點,這時候再嘗試把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>

這時候還是沒有切換動畫的,新警告來了

<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不能放在transition下,好的那我們換一種寫法試試

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

這時候就很完美,沒警告了。但是??王德發(fā)??切換動效在哪里??我陷入了沉思,官方文檔里給的示例是切換顯示隱藏的時候用v-if,也就是隱藏的時候dom節(jié)點被銷毀了,是不是我這個沒重新渲染呢??這時候給div加上一個動態(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>

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

最終代碼

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

這樣看著就舒服了

總結

最后想說,TSX真香!走新技術的路上難免會遇到很多坑,但解決了真的很舒服

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 解決Vue項目打包后打開index.html頁面顯示空白以及圖片路徑錯誤的問題

    解決Vue項目打包后打開index.html頁面顯示空白以及圖片路徑錯誤的問題

    這篇文章主要介紹了解決Vue項目打包后打開index.html頁面顯示空白以及圖片路徑錯誤的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • vue前端導出多級表頭的excel表的示例代碼

    vue前端導出多級表頭的excel表的示例代碼

    本文主要介紹了vue前端導出多級表頭的excel表的示例代碼,可以使用xlsx庫來創(chuàng)建Excel文件,下面就來具體介紹一下,感興趣的可以了解一下
    2024-06-06
  • Vue項目中對index.html中BASE_URL的配置方式

    Vue項目中對index.html中BASE_URL的配置方式

    這篇文章主要介紹了Vue項目中對index.html中BASE_URL的配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue 單元測試初探

    vue 單元測試初探

    這篇文章主要介紹了vue 單元測試的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-04-04
  • vue 使用 sortable 實現(xiàn) el-table 拖拽排序功能

    vue 使用 sortable 實現(xiàn) el-table 拖拽排序功能

    這篇文章主要介紹了vue 使用 sortable 實現(xiàn) el-table 拖拽排序功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • vue刪除html內容的標簽樣式實例

    vue刪除html內容的標簽樣式實例

    今天小編就為大家分享一篇vue刪除html內容的標簽樣式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue實現(xiàn)多條件篩選超簡潔代碼

    vue實現(xiàn)多條件篩選超簡潔代碼

    這篇文章主要給大家介紹了關于vue實現(xiàn)多條件篩選的相關資料,隨著數據的不斷增多,我們往往需要在表格中進行多條件的篩選,以便快速定位符合我們需求的數據,需要的朋友可以參考下
    2023-09-09
  • 解決vue內存溢出報錯的問題

    解決vue內存溢出報錯的問題

    這篇文章主要介紹了解決vue內存溢出報錯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue實現(xiàn)百度下拉列表交互操作示例

    vue實現(xiàn)百度下拉列表交互操作示例

    這篇文章主要介紹了vue實現(xiàn)百度下拉列表交互操作,結合實例形式分析了vue.js使用jsonp針對百度接口進行交互的相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • vue項目中如何使用mock你知道嗎

    vue項目中如何使用mock你知道嗎

    這篇文章主要為大家介紹了vue項目如何使用mock,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論

怀安县| 隆林| 永泰县| 安国市| 达孜县| 阳高县| 启东市| 民乐县| 公安县| 察隅县| 阿合奇县| 安顺市| 五指山市| 苏尼特右旗| 独山县| 淳化县| 临江市| 柏乡县| 盐源县| 福海县| 乌拉特中旗| 河曲县| 丹凤县| 呼和浩特市| 宜昌市| 神农架林区| 游戏| 包头市| 茶陵县| 武清区| 深泽县| 龙门县| 郴州市| 丁青县| 肃南| 义马市| 齐齐哈尔市| 肥西县| 内乡县| 塔河县| 康保县|