国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

react-router 路由切換動畫的實現示例

2019-11-19 12:25:36
字體:
來源:轉載
供稿:網友

路由切換動畫

因為項目的需求,需要在路由切換的時候,加入一些比較 zb 的視覺效果,所以研究了一下。把這些學習的過程記錄下來,以便以后回顧。同時也希望這些內容能夠幫助一些跟我一樣的菜鳥,讓他們少走些坑。可能我對代碼的表述不是很到位,希望大家不要介意。機智的你們一定可以看明白。

參考內容:

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'@withRouterclass 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屬性。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大化| 安乡县| 乌恰县| 逊克县| 昭通市| 洛阳市| 云和县| 湛江市| 高密市| 体育| 沙河市| 白城市| 遂平县| 池州市| 徐水县| 乌鲁木齐市| 西安市| 介休市| 兴安盟| 连平县| 峡江县| 外汇| 姜堰市| 昌吉市| 弥勒县| 旬邑县| 泾川县| 定结县| 千阳县| 仙游县| 普陀区| 托里县| 保靖县| 林州市| 五大连池市| 双鸭山市| 确山县| 资源县| 宽城| 洪泽县| 冀州市|