React 路由v6 - 超全详解

简介: React 路由v6 - 超全详解

React router v6 路由

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

@[TOC]

Ⅰ、路由 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 方法来懒加载 ;

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

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

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;
相关文章
|
2月前
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
184 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
18天前
|
前端开发 API UED
React 路由守卫 Guarded Routes
【10月更文挑战第26天】本文介绍了 React 中的路由守卫(Guarded Routes),使用 `react-router-dom` 实现权限验证、登录验证和数据预加载等场景。通过创建 `AuthContext` 管理认证状态,实现 `PrivateRoute` 组件进行路由保护,并在 `App.js` 中使用。文章还讨论了常见问题和易错点,提供了处理异步操作的示例,帮助开发者提升应用的安全性和用户体验。
35 1
|
3月前
|
移动开发 资源调度 前端开发
介绍React路由模式
【8月更文挑战第10天】介绍React路由模式
57 12
|
21天前
|
前端开发 安全 网络安全
React——路由Route
React——路由Route
31 2
React——路由Route
|
1月前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
213 19
|
1月前
|
前端开发 网络架构
React 路由
10月更文挑战第11天
33 2
|
1月前
|
前端开发 JavaScript 网络架构
实现动态路由与状态管理的SPA——使用React Router与Redux
【10月更文挑战第1天】实现动态路由与状态管理的SPA——使用React Router与Redux
33 1
|
2月前
|
前端开发 Python
React技术栈-React路由插件之自定义组件标签
关于React技术栈中React路由插件自定义组件标签的教程。
55 4
React技术栈-React路由插件之自定义组件标签
|
2月前
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
87 3
|
2月前
|
前端开发 程序员 API
React技术栈-React路由插件之react-router的基本使用
这篇博客介绍了React路由插件react-router的基本使用,包括其概念、API、以及如何通过实战案例在React应用中实现SPA(单页Web应用)的路由管理。
70 9