91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用react-router怎么實現一個路由切換動畫

發布時間:2021-04-14 18:11:45 來源:億速云 閱讀:1108 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關使用react-router怎么實現一個路由切換動畫,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.插件依賴

使用的插件是react-transition-group。先簡單介紹一下動畫插件的使用方式。

CSSTransition這個組件有兩個比較主要的屬性:key和in

in:Boolean屬性其實可以理解為是否顯示當前內容節點。true則顯示,false則不顯示。

key:String這個屬性是配合TransitionGroup組件來使用的。在一般的列表組件中(列如 todolist),可以通過key來判斷列表中的子節點需要被插入還是移除,然后觸發動畫。

2. Switch 組件

這個組件有一個很重要的屬性:location。同時這個屬性也是路由切換動畫的關鍵所在。Switch組件的子組件(一般是 Route 和 Redirect)會根據當前瀏覽器的location作為匹配依據來進行路由匹配。但是如果Switch組件定義了location屬性,其中的子組件就會以定義的location作為匹配依據。

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 (
      <TransitionGroup>
        <CSSTransition key={location.key} timeout={1000} classNames="fade">
          <Switch location={location}>
            <Route path="/route-1" component={Route1} />
            <Route path="/route-2" component={Route2} />
          </Switch>
        </CSSTransition>
      </TransitionGroup>
    )
  }
}

export default Routes

4.原理分析

先確定需求:當切換路由的時候,舊的路由內容在一定時間內過渡消失,新的路由內容過渡顯示。

在這個需要里面有兩個重要的部分:

  • 過渡期間,會同時存在兩個節點:新節點和舊節點

  • 舊節點應該顯示舊的路由內容,新的節點應該顯示新的路由內容

4.1 同時存在兩節點

剛剛提到的CSSTransitionkey屬性可以決定該節點是否需要顯示。

Router中的location屬性會在路由發生變化的時候,進行更新,而location里面的key則可以作為CSSTransitionkey

關于 history 對象,可以理解為一個數組,當頁面的 location 發生變化時,或者刷新頁面,history 就會push一個新的歷史信息。在這個歷史信息里面,有一個key屬性,用來區分不同的歷史記錄(跳轉新頁面或者是刷新頁面)

當路由切換的時候,location對象就會改變,新的key會使得頁面重新渲染時出現兩個CSSTransition(新舊節點)。

4.2 新舊節點對應新舊路由內容

如果只是配置key屬性,會發現舊的節點會去匹配新的路由內容。這是因為Route組件默認根據當前location進行匹配。為了讓舊節點中的Route根據舊的location進行匹配,就需要設置Switchlocation屬性。

以上就是使用react-router怎么實現一個路由切換動畫,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平泉县| 松潘县| 富裕县| 临武县| 侯马市| 西盟| 忻城县| 高唐县| 沽源县| 小金县| 滁州市| 建始县| 昆明市| 山西省| 卢湾区| 揭阳市| 永善县| 桐梓县| 宁夏| 中牟县| 台江县| 石嘴山市| 洞头县| 苏尼特左旗| 辽宁省| 昌黎县| 宾川县| 澄迈县| 广河县| 固阳县| 武定县| 许昌市| 莱州市| 明水县| 阿鲁科尔沁旗| 新建县| 澄城县| 安岳县| 科尔| 武鸣县| 安徽省|