React@16.x(42)路由v5.x(7)常見應用場景(4)- 路由切換動畫

目錄

  • 1,實現路由切換
    • 基礎樣式
  • 2,使用 CSSTransition 添加動畫
    • 1,自定義動畫組件 *TransitionRoute.jsx*
    • 2,*App.jsx*
    • 3,樣式改動
  • 3,注意點

通過一個例子來說明如何實現。

1,實現路由切換

基礎樣式

App.jsx

import { BrowserRouter as Router, Route, NavLink } from "react-router-dom";
import { Home, News, Goods } from "./page";
import "./App.css";export default function App() {return (<div className="container"><Router><div className="nav-box"><NavLink to="/" exact>首頁</NavLink><NavLink to="/news">新聞頁</NavLink><NavLink to="/goods">商品頁</NavLink></div><div className="page-box"><Route path="/" exact component={Home}></Route><Route path="/news" component={News}></Route><Route path="/goods" component={Goods}></Route></div></Router></div>);
}

App.css

.container {margin: 0 auto;width: 400px;
}.nav-box {background-color: lightblue;line-height: 3;text-align: center;
}.nav-box a {display: inline-block;margin: 10px;
}.nav-box a.active {color: salmon;
}.page-box {height: 200px;outline: 1px solid salmon;
}

page.jsx

import React from "react";
import "./page.css";export function Home() {return <div className="page home">Home</div>;
}export function News() {return <div className="page news">News</div>;
}export function Goods() {return <div className="page goods">Goods</div>;
}

page.css

.page {height: 100%;text-align: center;
}.home {background-color: lightblue;
}.news {background-color: lightgreen;
}.goods {background-color: lightyellow;
}

顯示效果:

在這里插入圖片描述

2,使用 CSSTransition 添加動畫

CSSTransition 的使用參考 React@16.x(33)動畫(上)

先看最終效果

在這里插入圖片描述

  1. 可以看到路由頁面(一開始)是重疊在一起的,所以需要使用絕對定位來實現。
  2. 動畫過程中,對應的路由頁面在動畫開始前,應該是未加載的狀態。同理,退出后應該是卸載狀態。所以在 CSSTransition 組件上需要添加 mountOnEnterunmountOnExit

完整代碼:

1,自定義動畫組件 TransitionRoute.jsx

match 屬性未匹配時為 null

import React from "react";
import { Route } from "react-router-dom";
import { CSSTransition } from "react-transition-group";
import "animate.css";export default function TransitionRoute(props) {const { component: Comp, ...rest } = props;return (<Route {...rest}>{({ match }) => {return (<CSSTransitionin={!!match}timeout={500}mountOnEnterunmountOnExitclassNames={{enterActive: "animate__fadeInRight",exitActive: "animate__fadeOutLeft",}}><Comp></Comp></CSSTransition>);}}</Route>);
}

2,App.jsx

只需要將 Route 替換為 TransitionRoute 即可。

3,樣式改動

App.css,父級元素添加相對定位。

.page-box {position: relative;
}

page.jsx。因為想使用 animate.css,所以對進行動畫的元素添加公共樣式 animate__animated

import React from "react";
import "./page.css";export function Home() {return <div className="page animate__animated home">Home</div>;
}export function News() {return <div className="page animate__animated news">News</div>;
}export function Goods() {return <div className="page  animate__animated goods">Goods</div>;
}

page.css,添加絕對定位。

.page {position: absolute;left: 0;top: 0;height: 100%;width: 100%;
}

3,注意點

  • 當不使用 Swtich 組件時,每個Route 組件都會加載,只是不顯示而已。所以可實現切換路由的動畫。
  • 使用 Swtich 組件后,因為它只會加載匹配到的 Route 組件,其他Route 組件并沒有加載,所以無法完成退出進入動畫

在 React 的插件中可以檢查下:

不使用 Switch 組件時,3個 Route 組件都會渲染,只是未匹配的不展示:

缺圖

使用 Switch 后,只會渲染一個 Route 組件:

在這里插入圖片描述


以上。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36626.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36626.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[DDD] 領域驅動設計簡介

領域驅動設計 Domain Driven Design 1 DDD簡介 領域驅動設計&#xff08;Domain-Driven Design&#xff0c;簡稱DDD&#xff09;是一種軟件開發方法論&#xff0c;它強調軟件設計應緊密圍繞業務領域模型進行。DDD的核心思想是將實現與業務邏輯分離&#xff0c;通過深入理解和…

億發進銷存管理系統+:多終端無縫協同,實現經營銷售場景全覆蓋

億發軟件憑借產品、市場、業務的深入理解&#xff0c;在進銷存基礎上進行了延伸&#xff0c;推出多終端、一體化的“進銷存管理系統”多元產品矩陣。對企業經營中進貨、出貨、銷售、付款等進行全程跟蹤管理。有效輔助企業解決業務管理、銷售管理、庫存管理、財務管理等一系列問…

Java路徑操縱漏洞示例與解決賞析之一

示例代碼 public static List<File> findClassesInPackage(String codePath,String packageName, boolean recursive) {List<File> classFiles = new ArrayList<>();String packagePath = packageName.replace(., /);File directory = new File(codePath + &…

【大數據】—量化交易實戰案例雙均線策略(移動平均線)

聲明&#xff1a;股市有風險&#xff0c;投資需謹慎&#xff01;本人沒有系統學過金融知識&#xff0c;對股票有敬畏之心沒有踏入其大門&#xff0c;今天用另外一種方法模擬炒股&#xff0c;后面的模擬的實戰全部用同樣的數據&#xff0c;最后比較哪種方法賺的錢多。 量化交易…

【項目實訓】各種反爬策略及爬蟲困難點總結

在這里&#xff0c;我總結了本次項目的數據收集過程中遇到的反爬蟲策略以及一些爬蟲過程中容易出現問題的地方。 user-agent 簡單的設置user-agent頭部為瀏覽器即可&#xff1a; 爬取標簽中帶href屬性的網頁 對于顯示崗位列表的頁面&#xff0c;通常檢查其源代碼就會發現&…

深入理解鏈表:基礎概念、操作及應用

前言 鏈表&#xff08;Linked List&#xff09;是一種重要的數據結構&#xff0c;廣泛應用于各種算法和系統設計中。本文將詳細介紹鏈表的基本概念、類型、基本操作及其在實際編程中的應用&#xff0c;并使用C語言代碼示例進行說明。 鏈表的基本概念 鏈表是一種線性數據結構…

【數據結構】(C語言):動態數組

動態數組&#xff1a; 內存區域連續&#xff0c;即每個元素的內存地址連續。可用索引查看元素&#xff0c;數組[索引號]。指定位置刪除元素&#xff0c;該位置之后的元素全部往前移動一位。指定位置添加元素&#xff0c;從最后到該位置的元素全部往后移動一位。物理大小&#…

【保姆級講解ECMAScript和JavaScript之間的區別】

&#x1f3a5;博主&#xff1a;程序員不想YY啊 &#x1f4ab;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f917;點贊&#x1f388;收藏?再看&#x1f4ab;養成習慣 ?希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出…

mysql 升級到8.0

MySQL :: MySQL 8.0 Reference Manual :: 3.7 Upgrading MySQL Binary or Package-based Installations on Unix/Linux 2種升級方式&#xff1a; In-Place Upgrade &#xff1a; data目錄替換 Logical Upgrade&#xff1a; 通過 mysqldump 導出為sql文本后&#xff0c;導入…

全面國產化信創適配改造方案說明

一、概敘 系統的全面國產化適配改造需要從多個方面進行考慮&#xff0c;改造前需要進行充分的論證&#xff0c;在滿足具體業務場景的前提下&#xff0c;以確保系統的穩定性和安全性&#xff0c;同時還要考慮技術的發展&#xff0c;不斷優化和更新。因此全面國產化適配改造也面臨…

Redis集群安裝(三主三從一哨兵)

Redis集群安裝&#xff08;三主三從一哨兵&#xff09; 一&#xff0c;搭建環境 ? 在三臺服務器上分別搭建redis并測試是否能啟動&#xff08;搭建方法&#xff09; 二&#xff0c;Redis cluster三主三從 配置環境變量 vim /etc/profile #添加如下內容 export REDIS_HOME…

AI 開發平臺(Coze)搭建《AI女友(多功能版本)》

前言 本文講解如何從零開始&#xff0c;使用扣子平臺去搭建《AI女友&#xff08;多功能版本&#xff09;》 bot直達&#xff1a;AI女友&#xff08;多功能版&#xff09; - 扣子 AI Bot (coze.cn) 歡迎大家前去體驗&#xff01;&#xff01;&#xff01; 正文 功能介紹 …

系統架構師考點--系統配置與性能評價

大家好。今天我們來總結一下系統配置與性能評價的考點內容&#xff0c;這一部分一般是出在上午場的選擇題中&#xff0c;占1-2分左右。 一、性能指標 計算機 對計算機評價的主要性能指標有&#xff1a;時鐘頻率(主頻)&#xff1b;運算速度&#xff1b;運算精度內存的存儲容量…

ManageEngine連續榮登Gartner 2024年安全信息和事件管理魔力象限

我們很高興地宣布&#xff0c;ManageEngine再次在Gartner的安全信息和事件管理&#xff08;SIEM&#xff09;魔力象限中榜上有名&#xff0c;這是我們連續第七年獲得這一認可。 Gartner ManageEngine Log360是一款全面的SIEM解決方案&#xff0c;旨在幫助組織有效處理日志數據…

計算機共形幾何簡介

計算機共形幾何&#xff08;Computational Conformal Geometry&#xff09;是一門研究計算機圖形學和幾何學結合的領域&#xff0c;主要研究曲面的表示、形變和分析等問題。共形幾何是研究保持角度度量不變的幾何變換&#xff0c;而計算機共形幾何則是將共形幾何的概念和方法應…

cuda 學習筆記4

一 基本函數 在GPU上開辟空間&#xff0c;無論定義的數據是float還是int ,還是****gpu_int,分配空間的函數都是下面固定的形式 (void**)& 1.函數定義&#xff0c;global void 是配套使用的&#xff0c;是在GPU上定義&#xff0c;也就是GPU上執行&#xff0c;CPU上調用的函數…

python pyautogui.position實時輸出坐標

import pyautogui import timewhile True:# 獲取鼠標當前坐標x, y pyautogui.position()# 打印坐標print(f"當前坐標&#xff1a;({x}, {y})")# 暫停1秒time.sleep(1) 輸出實時鼠標位置坐標

Java高手的30k之路|面試寶典|精通MySQL(二)

分區表 分區類型 MySQL 支持以下幾種表分區類型&#xff0c;這些分區類型有助于優化大型表的管理和查詢性能&#xff1a; Range Partitioning&#xff08;范圍分區&#xff09;&#xff1a; 范圍分區是基于列的值范圍來分配數據的。你可以定義一個或多個列的值區間&#xff0…

62.指針和二維數組(2)

一.指針和二維數組 1.如a是一個二維數組&#xff0c;則數組中的第i行可以看作是一個一維數組&#xff0c;這個一維數組的數組名是a[i]。 2.a[i]代表二維數組中第i行的首個元素的地址&#xff0c;即a[i][0]的地址。 二.進一步思考 二維數組可以看作是數組的數組&#xff0c;本…

springboot+vue+mybatis母嬰二手銷售系統+PPT+論文+講解+售后

目前由于我國二手銷售的規模較小,同發達國家相比,二手銷售比重始終偏低,消費總額增長緩慢,進一步抑制了市場消費的提升,隨著市場競爭的日益激烈,雖然許多商家主動選用二手銷售模式,但卻缺乏對其充分的重視與銷售風險的良性控制,一些商家沒有建立獨立的信用實踐管理部門,無法在交…