ReactRouter v6升級的步驟

React Router v6 引入了一個?Routes?組件,它有點像?Switch?,但功能要強大得多。與?Switch?相比,?Routes?的主要優勢在于:

  • <Routes>?中的所有?<Route>?和?<Link>?都是相對的。這導致在?<Route path>?和?<Link to>?中的代碼更精簡和更可預測。
  • 路由的選擇基于最佳匹配,而不是按順序遍歷。這避免了由于在?<Switch>?中定義較晚而導致無法到達的錯誤。
  • 路由可以嵌套在一個地方,而不是分散在不同的組件中。在中小型應用程序中,這樣可以方便地一次性查看所有路由。在大型應用程序中,您仍然可以通過?React.lazy?動態加載將路由嵌套在打包中。

v6,您需要將所有?<Switch>?元素轉換為?<Routes>?。

首先,讓我們來談談 v6 中的相對路由和鏈接。

v5 是這樣寫:

// This is a React Router v5 app
import {BrowserRouter,Switch,Route,Link,useRouteMatch,
} from "react-router-dom";function App() {return (<BrowserRouter><Switch><Route exact path="/"><Home /></Route><Route path="/users"><Users /></Route></Switch></BrowserRouter>);
}function Users() {// In v5, nested routes are rendered by the child component, so// you have <Switch> elements all over your app for nested UI.// You build nested routes and links using match.url and match.path.let match = useRouteMatch();return (<div><nav><Link to={`${match.url}/me`}>My Profile</Link></nav><Switch><Route path={`${match.path}/me`}><OwnUserProfile /></Route><Route path={`${match.path}/:id`}><UserProfile /></Route></Switch></div>);
}

v6需要這個樣子:

// This is a React Router v6 app
import {BrowserRouter,Routes,Route,Link,
} from "react-router-dom";function App() {return (<BrowserRouter><Routes><Route path="/" element={<Home />} /><Route path="users/*" element={<Users />} /></Routes></BrowserRouter>);
}function Users() {return (<div><nav><Link to="me">My Profile</Link></nav><Routes><Route path=":id" element={<UserProfile />} /><Route path="me" element={<OwnUserProfile />} /></Routes></div>);
}

v5 應用程序中的所有?<Route children>?在 v6 中都變為了?<Route element={}>

對于子路由,index設置為true時,相當于一個默認的子路由

關于?<Route path>?模式的注意事項?

React Router v6 使用簡化的路徑格式。在 v6 中,?<Route path>?只支持兩種占位符:動態?:id?樣式的參數和?*?通配符。?*?通配符只能在路徑末尾使用,不能在中間使用。

/groups
/groups/admin
/users/:id
/users/:id/messages
/files/*
/files/:id/*

在 v6 中,無論當前 URL 如何,?<Link to="me">?都會呈現相同的?<a href>?。?

使用useRoutes代替react-router-config?

v5 版本的?react-router-config?包中的所有功能都已移至 v6 的核心中。如果您喜歡/需要將路由定義為 JavaScript 對象,而不是使用 React 元素,那么您一定會喜歡這個功能。

function App() {let element = useRoutes([// These are the same as the props you provide to <Route>{ path: "/", element: <Home /> },{ path: "dashboard", element: <Dashboard /> },{path: "invoices",element: <Invoices />,// Nested routes use a children property, which is also// the same as <Route>children: [{ path: ":id", element: <Invoice /> },{ path: "sent", element: <SentInvoices /> },],},// Not found routes work as you'd expect{ path: "*", element: <NotFound /> },]);// The returned element will render the entire element// hierarchy with all the appropriate context it needsreturn element;
}

使用useNavigate代替useHistory?

React Router v6 引入了新的導航 API,該 API 與?<Link>?同義,可更好地兼容啟用了懸念的應用程序。根據您的風格和需求,我們提供了該 API 的命令式和聲明式版本。

useHistory?更改為?useNavigate?,并更改?history.push?或?history.replace?調用站點。

// This is a React Router v6 app
import { useNavigate } from "react-router-dom";function App() {let navigate = useNavigate();function handleClick() {navigate("/home");}return (<div><button onClick={handleClick}>go home</button></div>);
}

注意:請注意,v5 版?<Redirect />?默認使用?replace?邏輯(可通過?push?屬性進行更改),而 v6 版?<Navigate />?默認使用?push?邏輯,可通過?replace?屬性進行更改。

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

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

相關文章

項目文章|EMBO J(IF=9.4):16S+代謝組解析腸道菌群代謝物改善高脂飲食誘導的胰島素抵抗機制

腸道菌群及其代謝產物與肥胖相關疾病&#xff08;如2型糖尿病&#xff09;密切相關&#xff0c;但其因果關系和潛在機制尚不清楚。研究表明&#xff0c;肥胖與腸道微生物的豐度和多樣性變化有關&#xff0c;例如&#xff0c;高脂飲食&#xff08;HFD&#xff09;誘導的肥胖會增…

AIGC率超標?掌握論文去AI痕跡的高效策略

隨著 AI 技術迅猛發展&#xff0c;各種AI輔助論文寫作的工具層出不窮&#xff01; 為了防止有人利用AI工具進行論文代寫&#xff0c;在最新的學位法中已經明確規定“已經獲得學位者&#xff0c;在獲得該學位過程中如有人工智能代寫等學術不端行為&#xff0c;經學位評定委員會…

ESP32CAM物聯網教學11

ESP32CAM物聯網教學11 霍霍webserver 在第八課的時候&#xff0c;小智把樂鑫公司提供的官方示例程序CameraWebServer改成了明碼&#xff0c;這樣說明這個官方程序也是可以更改的嘛。這個官方程序有四個文件&#xff0c;一共3500行代碼&#xff0c;看著都頭暈&#xff0c;小智決…

S7-200smart與C#通信

https://www.cnblogs.com/heizao/p/15797382.html C#與PLC通信開發之西門子s7-200 smart_c# s7-200smart通訊庫-CSDN博客https://blog.csdn.net/weixin_44455060/article/details/109713121 C#上位機讀寫西門子S7-200SMART PLC變量 教程_嗶哩嗶哩_bilibilihttps://www.bilibili…

清朝嘉慶二十五年(1820年)地圖數據

我們在《中國歷史行政區劃連續變化數據》一文中&#xff0c;為你分享了中國歷史行政區劃連續變化地圖數據。 現在再為你分享清朝嘉慶二十五年&#xff08;1820年&#xff09;的地圖數據&#xff0c;該數據對于研究歷史的朋友應該比較有用&#xff0c;請在文末查看領取方式。 …

【Rust練習】2.數值類型

練習題來自https://practice-zh.course.rs/basic-types/numbers.html 1 // 移除某個部分讓代碼工作 fn main() {let x: i32 5;let mut y: u32 5;y x;let z 10; // 這里 z 的類型是? }y的類型不對&#xff0c;另外&#xff0c;數字的默認類型是i32 fn main() {let x: i…

Jupyter Lab 使用

Jupyter Lab 使用詳解 Jupyter Lab 是一個基于 Web 的交互式開發環境&#xff0c;提供了比 Jupyter Notebook 更加靈活和強大的用戶界面和功能。以下是使用 Jupyter Lab 的詳細指南&#xff0c;包括安裝、基本使用、設置根目錄和擴展功能等內容。 一、Jupyter Lab 安裝與啟動…

HTTP背后的故事:理解現代網絡如何工作的關鍵(一)

一.HTTP是什么 概念 &#xff1a; 1.HTTP ( 全稱為 " 超文本傳輸協議 ") 是一種應用非常廣泛的 應用層協議。 2.HTTP 誕生與1991年. 目前已經發展為最主流使用的一種應用層協議. 3.HTTP 往往是基于傳輸層的 TCP 協議實現的 . (HTTP1.0, HTTP1.1, HTTP2.0 均為 T…

DelphiXE內存泄漏問題,已經發生了很多次

內存泄漏的地方一定要注意: 不斷分配的Tbytes會導致內存泄漏,發生以下錯誤: Access violation at address CA5ED400. Execution of address CA5ED400 {=====內存泄漏最大的地方、居然沒有釋放=====} //SetLength(tbuff,length(Adata)); //Move(Adata,Tbuff,length(…

2024世界人工智能大會(WAIC)學習總結

1 前言 在2024年的世界人工智能大會&#xff08;WAIC&#xff09;上&#xff0c;我們見證了從農業社會到工業社會再到數字化社會的深刻轉變。這一進程不僅體現在技術的單點爆發&#xff0c;更引發了整個產業鏈的全面突破&#xff0c;未來將是技術以指數級速度發展的嶄新時代。…

等保測評別犯難,黑龍江等保測評服務流程來啦!

引言 在當今數字化時代&#xff0c;網絡安全已經成為企業發展的基石。為了響應國家網絡安全等級保護&#xff08;簡稱“等保”&#xff09;政策&#xff0c;黑龍江地區的企業紛紛啟動了等保測評工作。然而&#xff0c;對于很多企業而言&#xff0c;等保測評似乎是一項既復雜又…

【從0到1進階Redis】主從復制 — 主從機宕機測試

上一篇&#xff1a;【從0到1進階Redis】主從復制 測試&#xff1a;主機斷開連接&#xff0c;從機依舊連接到主機的&#xff0c;但是沒有寫操作&#xff0c;這個時候&#xff0c;主機如果回來了&#xff0c;從機依舊可以直接獲取到主機寫的信息。 如果是使用命令行&#xff0c;來…

PyTorch深度學習實戰(46)——深度Q學習

PyTorch深度學習實戰&#xff08;46&#xff09;——深度Q學習 0. 前言1. 深度 Q 學習2. 網絡架構3. 實現深度 Q 學習模型進行 CartPole 游戲小結系列鏈接 0. 前言 我們已經學習了如何構建一個 Q 表&#xff0c;通過在多個 episode 中重復進行游戲獲取與給定狀態-動作組合相對…

Hypertable install of rhel6.0

1.rpm 安裝:(如果已存在,會提示沖突,使用--replacefiles) 1.1 編譯環境 安裝gcc gcc-c++ make cmake(在admin machine上,放置rpm包的文件里依次執行下面的語句): sudo rpm -ivh cpp-4.4.6-4.el6.x86_64.rpm --replacefiles sudo rpm -ivh libgcc-4.4.6-4.el6.x86_64.rp…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(十四)-無人機操控關鍵績效指標(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技術報告&#xff0c;專注于無人機&#xff08;UAV&#xff09;在3GPP系統中的增強支持。文章提出了多個無人機應用場景&#xff0c;分析了相應的能力要求&#xff0c;并建議了新的服務級別要求和關鍵性能指標&#xff08;KPIs&#xff09;。…

第二證券:轉融通是什么意思?什么是轉融通?

轉融通&#xff0c;包含轉融資和轉融券&#xff0c;實質是借錢和借券。轉融通是指證券金融公司借入證券、籌得資金后&#xff0c;再轉借給證券公司&#xff0c;是一假貸聯絡&#xff0c;具體是指證券公司從符合要求的基金處理公司、保險公司、社保基金等組織出資者融券&#xf…

Python應用開發——30天學習Streamlit Python包進行APP的構建(15):優化性能并為應用程序添加狀態

Caching and state 優化性能并為應用程序添加狀態! Caching 緩存 Streamlit 為數據和全局資源提供了強大的緩存原語。即使從網絡加載數據、處理大型數據集或執行昂貴的計算,它們也能讓您的應用程序保持高性能。 本頁僅包含有關 st.cache_data API 的信息。如需深入了解緩…

技術成神之路:設計模式(六)策略模式

1.介紹 策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它定義了一系列算法&#xff0c;封裝每一個算法&#xff0c;并使它們可以相互替換。策略模式使得算法的變化獨立于使用算法的客戶端。 2.主要作用 策略模式的主要作用是將算法或行為…

面試問題梳理:項目中防止配置中的密碼泄露-Jasypt

背景 想起面試的時候&#xff0c;面試官問我現在大家用Spring框架&#xff0c;數據庫、ES之類的密碼都是配置在配置文件中的&#xff0c;有很大的安全隱患&#xff0c;你有考慮過怎么解決嘛&#xff1f; 當時我回答是可以在項目啟動的過程中的命令行追加的方式&#xff0c;感覺…

Hello,World!(C++)

題目描述 編寫一個能夠輸出 Hello,World! 的程序。 提示&#xff1a; - 使用英文標點符號&#xff1b; Hello,World! 逗號后面沒有空格。 H 和 W 為大寫字母。 樣例 #1 樣例輸入 #1 無 樣例輸出 #1 Hello,World! &#xff08;1&#xff09; #include<bits/stdc.…