網(wǎng)站首頁 編程語言 正文
最近在搭建PC項目的React
框架,涉及到React Router,開發(fā)同學有時就需要去嘗試點新的東西,在開發(fā)過程中才不會枯燥的,基于這個理念推動,就在搭建的時候用V6的版本開始了(雖然只是個新版本,也不算啥新東西)......
V6的版本相對于V5,做了很多的優(yōu)化,有書寫方面的、路由的嵌套、路由配置化、鑒權方面等等,下面就簡單的介紹下如何使用
一、關于書寫方面
路由注冊的時候由的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版本內(nèi)部算法改變,它默認就是匹配完整路徑,先后順序不再重要,它能夠自動找出最優(yōu)匹配路徑
//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" />} /> //組件內(nèi)部 //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); //前向?qū)Ш?等等依此類推
二、路由的嵌套方面優(yōu)化
使用?Outlet
?組件,此組件是一個占位符,告訴 React Router 嵌套的內(nèi)容應該放到哪里。
//路由中 <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
讀取一個路由配置數(shù)組,生成相應的路由組件列表,來實現(xiàn)路由配置化,
并且可以在路由配置中帶 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信息去自行實現(xiàn),
const onRouteBefore = ({ pathname, meta }) => { // 動態(tài)修改頁面title if (meta.title !== undefined) { document.title = meta.title } // 判斷未登錄跳轉(zhuǎn)登錄頁 if (!meta.noLogin) { if (!isLogin) { return '/login' } } }
原文鏈接:https://juejin.cn/post/7095293981713498149
相關推薦
- 2022-02-03 CentOS7啟動報錯:“A start job is running for /etc/rc.d/
- 2023-05-14 windows下vscode環(huán)境c++利用matplotlibcpp繪圖_C 語言
- 2022-09-17 Redis實現(xiàn)消息的發(fā)布訂閱原理分析_Redis
- 2022-07-04 教你在容器中使用nginx搭建上傳下載的文件服務器_nginx
- 2022-06-19 selenium?IDE自動化測試腳本的實現(xiàn)_其它綜合
- 2023-01-10 Go語言defer與return執(zhí)行的先后順序詳解_Golang
- 2021-12-12 Docker?Consul概述以及集群環(huán)境搭建步驟(圖文詳解)_docker
- 2023-03-05 Go語言學習之golang-jwt/jwt的教程分享_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支