首页IT科技react的路由(React 路由v6 – 超全详解)

react的路由(React 路由v6 – 超全详解)

时间2025-06-13 02:21:39分类IT科技浏览4336
导读:React router v6 路由...

React router v6 路由

已经习惯了 v5 版本的路由             ,那么 v6 版本的路由 该怎么应用呢?

Ⅰ              、路由 v6 (两种形式)

方案一 : ( 不推荐 )

通过标签 嵌套 标签 的形式 通过 Routes 为 包裹 Route 标签的形式

例 : 用法 👇

import { Route,Routes,BrowserRouter } from "react-router-dom"; import Page1 from ../view/Page1 import Page2 from ../view/Page2 import Page404 from ../view/Page404 function App() { <BrowserRouter> <Routes> <Route path=/page1 element = {<Page1 />} /> <Route path=/page2 element = {<Page2 />} /> <Route path=* element = {<Page404 /} /> <Routes> <BrowserRouter> } export default App; 需要添加子路由 就继续嵌套 要在 <Page1 /> 组件下 放入 <Outlet /> => 【确定子路由出现的位置

例 : 子路由 👇

<Route path=/page1 element = {<Page1 />} > <Route path=/page1/test1 element = {<Test1 />} /> <Route path=/page1/test2 element = {<Test2 />} /> </Route>

方案二 :( 推荐 )

通过 react 17 之后推出的 hooks -> useRoutes 这个 hooks                     ,看起来更像 vue 的路由配置       ,而不是堆组件的形式            。

例 : App.jsx 👇

import { BrowserRouter} from "react-router-dom"; import Element from ./routes function App() { return ( <BrowserRouter> <Element /> </BrowserRouter> ) } export default App;

例 : 路由配置 /routes/index.jsx 👇

import { useRoutes } from "react-router-dom"; import Page1 from ../view/Page1 import Page2 from ../view/Page2 import Page404 from ../view/Page404 function Element() { const element = useRoutes([ { path: /page1, element: <Page1 /> }, { path: /page2, element: <Page2 /> }, { path: *, element: LazyLoad(/view/404) } ]) return (element); } export default Element; 子路由可以通过 children 来嵌套实现; 注意放子路由的地方同样要         ,再加个 <Outlet /> 来确定子路由的位置;

例 : 子路由 👇 (如下 <Page1/> 中要加个<Outlet />)

... { path: /page1, element: <Page1 /> children: [ { path: /page1/aaa, element: <Aaa /> }, { path: /page1/bbb, element: <Baa /> } ] } ...

Ⅱ                   、 动态路由

动态路由的作用                    ,就是达到路由自定义传参的作用;

① 绑定参数 方案一 :组件形式 创建的路由)

<Route path = /page1/:content element = {<Page1 />} />

方案二 :(useRoutes 创建的路由)

... { path: /page1/:content, element: <Page1 /> }, ...

② 接收参数

接收的时候通过useParams钩子去接收

import {useParams} from react-router-dom; export default function Detail(props){ let { content } = useParams(); return( <div></div> ) }

Ⅲ      、路由重定向

方案一 : ( 通过 Navigate API)

import { Navigate} from "react-router-dom"; ... { path: *, element: <Navigate to=/page404/> }, ...

方案二 :

( 自己封装 )

例 : 封装一个组件 👇 import React,{useEffect} from react import {useNavigate } from react-router-dom export default function Redirect(props) { const navigate = useNavigate(); useEffect(()=>{ navigate(props.to,{replace:true}) }) return null }

例 : 使用:👇

import Redirect from ./Redirect { path: *, element: <Redirect to=/page404/> },

Ⅳ          、路由跳转 (两种形式)

方案二 : ( 标签类型 : 和上面的 路由重定向 一样 )

import {NavLink} from react-router-dom function Index() { return ( <ul> <li><NavLink to=page1> 页面1 </NavLink></li> <li><NavLink to=page1> 页面2 </NavLink></li> </ul> ) }

方案二 : ( 方法类型 )

import { useNavigate } from react-router-dom function Index() { return ( <ul> <li onClick={() => { useNavigate(/page1) }}>页面1</li> <li onClick={() => { useNavigate(/page2) }}>页面2</li> </ul> ) }

Ⅴ                    、路由懒加载

1         、路由懒加载           ,对与 性能 来说是一个非常好的 优化点

;

2      、只有在进入该路由的时候才      ,去 按需加载

对应的                  ,而不是一次性去加载全部;

3                    、通过 React.lazy 方法来懒加载 ;

4. 同时可以通过React.Suspense 的 fallback方法 去展示 加载中 的效果 ;

例 : 封装例子 👇 ( 同时更加简便导入 )

import { useRoutes } from "react-router-dom"; import React from react; const LazyLoad = (path) => { //传入在view 下的路径 const Comp = React.lazy(() => import(`../view${path}`)) return ( <React.Suspense fallback={<> 加载中...</>}> <Comp /> </React.Suspense> ) } function Element() { const element = useRoutes([ { path: /page1, element: LazyLoad(/Page1) }, { path: /page2, element: LazyLoad(/Page2) } ]) return (element); } export default Element;
声明:本站所有文章              ,如无特殊说明或标注   ,均为本站原创发布                    。任何个人或组织                  ,在未征得本站同意时                 ,禁止复制            、盗用   、采集                    、发布本站内容到任何网站               、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理         。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python中列表的概念(python列表的优点探究) php模式是什么意思(php中CGI模式的介绍)