網站首頁 編程語言 正文
最近在搭建PC項目的React
框架,涉及到React Router,開發同學有時就需要去嘗試點新的東西,在開發過程中才不會枯燥的,基于這個理念推動,就在搭建的時候用V6的版本開始了(雖然只是個新版本,也不算啥新東西)......
V6的版本相對于V5,做了很多的優化,有書寫方面的、路由的嵌套、路由配置化、鑒權方面等等,下面就簡單的介紹下如何使用
一、關于書寫方面
路由注冊的時候由的Switch改為了Routes
//V5版本 import {Route, Switch} from 'react-router-dom'; <div> <Switch> ...... ...... </Switch> </div> //V6版本 import {Route, Routes } from 'react-router-dom'; <div> <Routes > ...... ...... </Routes> </div>
不用Route標簽包裹子組件,可以直接使用element屬性,并且不需要exact來表示精準匹配,V6版本內部算法改變,它默認就是匹配完整路徑,先后順序不再重要,它能夠自動找出最優匹配路徑
//V5版本 import {Route, Switch} from 'react-router-dom'; <div> <Switch> <Route exact path="/"> <Home /> </Route> </Switch> </div> //V6的版本 import {Route, Routes } from 'react-router-dom'; <div> <Routes > <Route path="/" element={<Home />} /> </Routes> </div>
將Redirect改為Navigate
//路由配置中 //V5代碼如下 import { Redirect } from 'react-router-dom'; <Redirect to="/home" /> //V6如下 import { Navigate } from 'react-router-dom'; <Route path="/" element ={<Navigate replace to="/home" />} /> //組件內部 //V5版本 import { Redirect } from 'react-router-dom'; //重定向到首頁 return <Redirect to="/" /> //V6版本 import { Navigate } from 'react-router-dom'; //重定向到首頁 return <Navigate to="/" />
用useNavigate替代useHistory使用
import {useNavigate} from 'react-router-dom'; const navigate = useNavigate(); //如去首頁 navigate("/home"); //還可使用 navigate(-1); //后退到前一頁 navigate(-2); //后退到前兩頁的前一頁, navigate(1); //前向導航 等等依此類推
二、路由的嵌套方面優化
使用?Outlet
?組件,此組件是一個占位符,告訴 React Router 嵌套的內容應該放到哪里。
//路由中 <Routes> <Route path='/user/*' element={<User />} <Route path='user-item' element={<div>我是嵌套子項</div>} /> <Route/> </Routes> //User組件中 import {Outlet} from 'react-router-dom'; const User = () => { return <section> <h1>我是外容器</h1> <Outlet /> </section> } export default User;
三、關于路由的靈活配置化
可以通過API?useRoutes
讀取一個路由配置數組,生成相應的路由組件列表,來實現路由配置化,
并且可以在路由配置中帶 meta屬性,增加其他配置化信息,如路由圖標,是否需要登錄等其他信息
import { useRoutes } from 'react-router-dom'; export const routes = [ { path: '/', element: <Layout />, children: [ { path: 'home', meta: { title: '首頁', icon: <DashboardOutlined />, }, children: [ { path: 'application', element: <Application />, meta: { title: '應用', } } ] }, { path: 'setting', element: <Setting />, meta: { title: '設置', icon: <UserOutlined />, //圖表名稱 } } ] }, { path: '/login', element: <Login />, meta: { title: '登錄', noLogin: true, hideMenu: true } }, { path: '*', element: <Page404 />, meta: { title: '404', noLogin: true, hideMenu: true } }, ]; const Routes = () => ( useRoutes(routes) ) export default Routes;
四、關于路由鑒權方面
此處就不過多的概述,只是做個簡單的登錄校驗的實例,每個項目的關于鑒權方式都不一樣,可以結合上方第三點中 meta信息去自行實現,
const onRouteBefore = ({ pathname, meta }) => { // 動態修改頁面title if (meta.title !== undefined) { document.title = meta.title } // 判斷未登錄跳轉登錄頁 if (!meta.noLogin) { if (!isLogin) { return '/login' } } }
原文鏈接:https://juejin.cn/post/7095293981713498149
相關推薦
- 2022-03-24 聊一聊redis奇葩數據類型與集群知識_Redis
- 2023-11-17 Python如何使用matlibplot繪制3D柱形圖
- 2022-09-10 python讀取文件列表并排序的實現示例_python
- 2023-04-07 C語言中如何利用循環嵌套輸出一個菱形_C 語言
- 2022-05-12 ubuntu 20.04 redis fatal error: stdlib.h: No such
- 2022-03-23 Unity3d實現無限循環滾動背景_C#教程
- 2022-07-02 Python使用struct庫的用法小結_python
- 2022-11-03 關于golang?test緩存問題_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支