0


React 路由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'functionApp(){<BrowserRouter><Routes><Route  path='/page1' element ={<Page1 />}/><Route  path='/page2' element ={<Page2 />}/><Route  path='*' element ={<Page404 /}/><Routes><BrowserRouter>}exportdefault App;
  • 需要添加子路由 就继续嵌套
  • 要在 <Page1 /> 组件下 放入 <Outlet /> => 【确定子路由出现的位置

例 : 子路由 👇

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

方案二 :( 推荐 )

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

例 : App.jsx 👇

import{ BrowserRouter}from"react-router-dom";import Element from'./routes'functionApp(){return(<BrowserRouter><Element /></BrowserRouter>)}exportdefault 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'functionElement(){const element =useRoutes([{path:'/page1',element:<Page1 />},{path:'/page2',element:<Page2 />},{path:'*',element:LazyLoad('/view/404')}])return(element);}exportdefault Element;
  • 子路由可以通过 children 来嵌套实现

例 : 子路由 👇

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

Ⅱ、 动态路由

动态路由的作用,就是在去该路由的同时,还能带去一定的参数 ,达到路由自定义传参的作用

① 绑定参数
方案一 : (标签形式 创建的路由)

<Routepath='/page1/:content'element= {<Page1/>} />

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

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

② 接收参数

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

import{useParams}from'react-router-dom';exportdefaultfunctionDetail(props){let{ content }=useParams();return(<div></div>)}

Ⅲ、路由重定向

方案一 : ( 通过Navigate )

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

方案二 :( 自己封装 )
例 : 封装一个组件 👇

import React,{useEffect}from'react'import{useNavigate }from'react-router-dom'exportdefaultfunctionRedirect(props){const navigate =useNavigate();useEffect(()=>{navigate(props.to,{replace:true})})returnnull}

例 : 使用:👇

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

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

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

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

方案二 : ( 方法类型 )

import{ useNavigate }from'react-router-dom'functionIndex(){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';constLazyLoad=(path)=>{//传入在view 下的路径const Comp = React.lazy(()=>import(`../view${path}`))return(<React.Suspense fallback={<> 加载中...</>}><Comp /></React.Suspense>)}functionElement(){const element =useRoutes([{path:'/page1',element:LazyLoad('/Page1')},{path:'/page2',element:LazyLoad('/Page2')}])return(element);}exportdefault Element;

在这里插入图片描述

🚐 💨 华为社招渠道 👉 👉 请先阅读
🚀🚀🚀
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁


本文转载自: https://blog.csdn.net/weixin_42232622/article/details/127160489
版权归原作者 前端不秃头 所有, 如有侵权,请联系我们删除。

“React 路由v6 - 超全详解”的评论:

还没有评论