本篇文章給大家分享的是有關(guān)使用react-router怎么實(shí)現(xiàn)一個(gè)路由切換動(dòng)畫(huà),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):溫江服務(wù)器托管,成都服務(wù)器租用,溫江服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。1.插件依賴
使用的插件是react-transition-group
。先簡(jiǎn)單介紹一下動(dòng)畫(huà)插件的使用方式。
CSSTransition
這個(gè)組件有兩個(gè)比較主要的屬性:key和in
。
in:Boolean
屬性其實(shí)可以理解為是否顯示當(dāng)前內(nèi)容節(jié)點(diǎn)。true
則顯示,false
則不顯示。
key:String
這個(gè)屬性是配合TransitionGroup
組件來(lái)使用的。在一般的列表組件中(列如 todolist),可以通過(guò)key
來(lái)判斷列表中的子節(jié)點(diǎn)需要被插入還是移除,然后觸發(fā)動(dòng)畫(huà)。
2. Switch 組件
這個(gè)組件有一個(gè)很重要的屬性:location
。同時(shí)這個(gè)屬性也是路由切換動(dòng)畫(huà)的關(guān)鍵所在。Switch
組件的子組件(一般是 Route 和 Redirect)會(huì)根據(jù)當(dāng)前瀏覽器的location
作為匹配依據(jù)來(lái)進(jìn)行路由匹配。但是如果Switch
組件定義了location
屬性,其中的子組件就會(huì)以定義的location
作為匹配依據(jù)。
3.代碼部分
import React, { Component } from 'react' import { TransitionGroup, CSSTransition } from 'react-transition-group' import { Switch, Route, withRouter } from 'react-router-dom' @withRouter class Routes extends Component { render() { const location = this.props.location return () } } export default Routes
4.原理分析
先確定需求:當(dāng)切換路由的時(shí)候,舊的路由內(nèi)容在一定時(shí)間內(nèi)過(guò)渡消失,新的路由內(nèi)容過(guò)渡顯示。
在這個(gè)需要里面有兩個(gè)重要的部分:
過(guò)渡期間,會(huì)同時(shí)存在兩個(gè)節(jié)點(diǎn):新節(jié)點(diǎn)和舊節(jié)點(diǎn)
舊節(jié)點(diǎn)應(yīng)該顯示舊的路由內(nèi)容,新的節(jié)點(diǎn)應(yīng)該顯示新的路由內(nèi)容
4.1 同時(shí)存在兩節(jié)點(diǎn)
剛剛提到的CSSTransition
的key
屬性可以決定該節(jié)點(diǎn)是否需要顯示。
而Router
中的location
屬性會(huì)在路由發(fā)生變化的時(shí)候,進(jìn)行更新,而location
里面的key
則可以作為CSSTransition
的key
。
關(guān)于 history 對(duì)象,可以理解為一個(gè)數(shù)組,當(dāng)頁(yè)面的 location 發(fā)生變化時(shí),或者刷新頁(yè)面,history 就會(huì)push一個(gè)新的歷史信息。在這個(gè)歷史信息里面,有一個(gè)key
屬性,用來(lái)區(qū)分不同的歷史記錄(跳轉(zhuǎn)新頁(yè)面或者是刷新頁(yè)面)
當(dāng)路由切換的時(shí)候,location對(duì)象就會(huì)改變,新的key會(huì)使得頁(yè)面重新渲染時(shí)出現(xiàn)兩個(gè)CSSTransition(新舊節(jié)點(diǎn))。
4.2 新舊節(jié)點(diǎn)對(duì)應(yīng)新舊路由內(nèi)容
如果只是配置key
屬性,會(huì)發(fā)現(xiàn)舊的節(jié)點(diǎn)會(huì)去匹配新的路由內(nèi)容。這是因?yàn)?code>Route組件默認(rèn)根據(jù)當(dāng)前location
進(jìn)行匹配。為了讓舊節(jié)點(diǎn)中的Route
根據(jù)舊的location
進(jìn)行匹配,就需要設(shè)置Switch
的location
屬性。
以上就是使用react-router怎么實(shí)現(xiàn)一個(gè)路由切換動(dòng)畫(huà),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。