亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解如何給React-Router添加路由頁面切換時的過渡動畫

2024-05-06 16:50:17
字體:
來源:轉載
供稿:網友

PS: 本篇文章使用的React-Router版本為react-router-dom: ^5.0.0 (兼容4.x)

使用過Vue2的同學們應該都知道<transition>這個內置組件,它可以幫我們添加過渡動畫,之前一直用它來給Vue-Router路由的跳轉添加轉場動畫,使用起來非常便捷。那在React中應該如何給路由切換添加過渡動畫呢?

react-transition-group

我們需要借助React的官方動畫庫react-transition-group,文檔戳這里 

react-transition-group提供了三個React組件,分別是<Transition>,<CSSTransition>以及<TranstionGroup>,關于它們的詳細api還請各位去查閱官方文檔,這里只是簡單介紹一下它們各自的用途:

  • <Transition>:通過javascript動態修改style的方式為子元素添加動畫,對比<CSSTransiton>多了幾個編程式的props可以配置
  • <CSSTransition>:相比<Transition>多了一個classNames可以配置,通過引入CSS以及動態更改子元素className的方式為子元素添加動畫(是不是像極了Vue里的<transition>)
  • <TranstionGroup>:顧名思義,為多個子元素添加動畫,需要結合<Transition>或<CSSTransition>使用

關于react-transititon-group與react-router的結合使用方式,官方文檔里也給出了示例,但是直接拿來實現路由轉場動畫,我覺得方式并不夠優雅。我還是更傾向于封裝一個<AnimatedSwitch>組件來替換react-router自帶的<Switch>組件來實現路由跳轉時的轉場動畫。

編寫過渡組件

實際代碼也非常的簡單

比如我們的路由長下面這個樣子:

<!-- App.js --><Switch>  <Route exact path="/login" component={Login} />  <Route exact path="/register" component={Register} />  <Route exact path="/" component={Home} /></Switch>

我們需要寫一個<AnimatedSwitch>來實現<Switch>的功能還要給路由跳轉添加動畫,其實也就是在<Swtich>外部用<CSSTransition>和<TranstionGroup>再封裝一層。

代碼如下:

// AnimatedSwitch.less// 很多動畫都需要給路由對應組件最外層元素設置position: absolute;.route {  position: absolute;  left: 0;  top: 0;  width: 100%;  height: 100%;}// 幀動畫.fade-enter {  opacity: 0;}.fade-enter.fade-enter-active {  opacity: 1;  transition: opacity 300ms ease-in;}.fade-exit {  opacity: 1;}.fade-exit.fade-exit-active {  opacity: 0;  transition: opacity 300ms ease-in;}
// AnimatedSwitch.jsimport React from 'react'import { TransitionGroup, CSSTransition } from 'react-transition-group'import { Route, Switch } from 'react-router-dom'import './AnimatedSwitch.less'const AnimatedSwitch = props => {  const { children } = props  return (    <Route      render={({ location }) => (        <TransitionGroup>          <CSSTransition            key={location.key}            classNames={props.type || 'fade'}             timeout={props.duration || 300}          >            <Switch location={location}>{children}</Switch>          </CSSTransition>        </TransitionGroup>      )}    />  )}export default AnimatedSwitch

其中值得注意的是用到了<Route>的render函數,我們需要用它將route props中的location傳遞給<Switch>,使其具有動態更換子路由的能力。

我們原有的JSX可以更換成如下結構:

<!-- App.js --><AnimatedSwitch>  <Route exact path="/login" component={Login} />  <Route exact path="/register" component={Register} />  <Route exact path="/" component={Home} /></AnimatedSwitch>

至此,一個簡單的<AnimatedSwitch>組件的編寫就完成了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av免费观看91av精品在线| 国产欧美在线播放| 亚洲一区二区三| 欧美日韩中文在线观看| 日韩在线高清视频| 欧美伦理91i| 亚洲精品第一页| 亚洲综合自拍一区| 91最新在线免费观看| 亚洲欧美日韩天堂一区二区| 国产性色av一区二区| 亚洲男女自偷自拍图片另类| 久久久久九九九九| 成人福利网站在线观看| 92看片淫黄大片看国产片| 国产免费一区二区三区在线观看| 亚洲精品99久久久久| 九九精品在线视频| 成人综合网网址| 亚洲国产精品热久久| 国产欧美日韩高清| 97在线看免费观看视频在线观看| 欧美精品激情视频| 国产福利视频一区二区| 欧美俄罗斯乱妇| 久久国产精品久久久| 97香蕉超级碰碰久久免费的优势| 色狠狠久久aa北条麻妃| 97免费中文视频在线观看| 91久久国产婷婷一区二区| 国产欧美日韩免费看aⅴ视频| 日韩精品极品视频免费观看| 亚洲福利精品在线| 国产精品综合久久久| 日韩在线观看精品| 亚洲色图在线观看| 亚洲天堂2020| 久久艳片www.17c.com| 黑人巨大精品欧美一区二区| 伊人一区二区三区久久精品| 欧美激情一级精品国产| 久久精品在线播放| 欧美激情视频给我| 亚洲性69xxxbbb| 欧美二区乱c黑人| 成人欧美一区二区三区在线湿哒哒| 日本久久久久久久久久久| 97av视频在线| 精品五月天久久| 欧美尺度大的性做爰视频| 97视频在线看| 欧美日韩视频在线| 久久久精品久久久久| 国产日韩欧美在线看| 久久综合伊人77777| 2018日韩中文字幕| 亚洲精品白浆高清久久久久久| 久久精品色欧美aⅴ一区二区| 91亚洲人电影| 色琪琪综合男人的天堂aⅴ视频| 亚洲欧美日韩精品久久| 久久久日本电影| 久久综合伊人77777蜜臀| 久久夜色精品亚洲噜噜国产mv| 亚洲成年人影院在线| 国产一区二区三区在线观看网站| 色综合久久中文字幕综合网小说| 欧美国产日韩二区| 国外色69视频在线观看| 日韩欧亚中文在线| 亚洲精品成人免费| 91av视频在线免费观看| 91国自产精品中文字幕亚洲| 日韩精品免费综合视频在线播放| 久久亚洲影音av资源网| 搡老女人一区二区三区视频tv| 欧美一级大片在线免费观看| 久久手机精品视频| 91久久久精品| 中文字幕日韩av综合精品| 美女黄色丝袜一区| 色偷偷偷综合中文字幕;dd| 一本色道久久88综合亚洲精品ⅰ| 成人黄色午夜影院| 日本国产一区二区三区| 国产精品日韩专区| 亚洲成av人片在线观看香蕉| 国产成人91久久精品| 欧美—级a级欧美特级ar全黄| 久久国产精品久久国产精品| 中文字幕日韩精品在线观看| 日韩电影在线观看永久视频免费网站| 国产欧美日韩专区发布| 国产精品丝袜一区二区三区| 亚洲bt欧美bt日本bt| 欧美性猛交xxxx乱大交极品| 欧美日韩国产一区中文午夜| 日韩av在线网站| 成人a级免费视频| 亚洲大胆美女视频| 久久精品国产91精品亚洲| 成人国产在线激情| 日韩毛片在线看| 国产精品久久999| 国产成人+综合亚洲+天堂| 国产成人久久精品| 一个色综合导航| 日韩精品在线私人| 国产偷亚洲偷欧美偷精品| 91国产一区在线| 国产剧情久久久久久| 精品国产福利视频| 日本精品久久中文字幕佐佐木| 视频一区视频二区国产精品| 在线国产精品视频| 亚洲尤物视频网| 久久久久久亚洲精品中文字幕| 中文字幕久精品免费视频| 欧美人与性动交a欧美精品| 国产精品视频区| 国产精品入口日韩视频大尺度| 亚洲色图美腿丝袜| 北条麻妃一区二区在线观看| 日韩在线观看免费全集电视剧网站| 国产在线视频2019最新视频| 国产小视频91| 中文字幕精品—区二区| 成人精品网站在线观看| 欧美裸体视频网站| 91久久久久久久一区二区| 亚洲欧美精品中文字幕在线| 国产美女扒开尿口久久久| 亚洲欧美另类中文字幕| 中文字幕精品一区二区精品| 精品视频在线播放色网色视频| 亚洲精品99久久久久中文字幕| 日本韩国欧美精品大片卡二| 亚洲丝袜av一区| 国产91精品视频在线观看| 日韩高清电影好看的电视剧电影| 成人在线视频网站| 国产精品一区二区久久| 91精品久久久久久| 国产成人涩涩涩视频在线观看| 亚洲国产成人在线视频| 欧美国产日韩一区二区在线观看| 成人黄色生活片| 日韩在线观看免费高清| 亚洲人成在线一二| 日韩成人av网| 国产精品美女免费视频| 欧美电影免费观看电视剧大全| xxxxx91麻豆| 欧美日韩中文字幕综合视频| 欧美精品一二区| 国产日韩av高清| 97免费视频在线| 亚洲精品99久久久久| 91日韩在线播放| 欧美中文在线观看国产| 亚洲精品大尺度| 国产精品久久久精品| 国产91精品久久久| 成人精品视频99在线观看免费|