React 路由篇(v6)

写在开头

本文是根据尚硅谷react课程React Router Dom v6篇的总结笔记


01_一级路由

        Router 6中一级路由跟5版本大体结构是差不多的,具体细节在注册路由组件时,5版本中的component更改为element且组件写法也不同了。

// NavLink 路由链接
Home
// Link 路由链接
Home
// 路由组件
} /> // v6
//} /> // v5

v5中的包裹多组件实现路径组件一一匹配的Switch已经废除,取而代之的是Routes


     } />
     } />

02_NavLink的高亮显示

        v5中NavLink高亮显示由activeClassName实现,v6中这个方法已经废除了,此时实现高亮效果用的是className,它会有一个回调函数,参数为一个名为isActive的对象,该对象中同名isActive属性保存着该路由是否被激活,结果为true时即激活时返回所要高亮效果类名。

// 封装一个函数来控制高亮
const computedClassName = (isActive) => {
    return isActive ? 'base active' : 'base'
}
 computedClassName(isActive)}
     to='/home'
>Home

03_重定向

        v5中重定向会在所有路由下使用Redirect来进行重定向,在v6中我们使用Navigate

// 引入Navigate
import { NavLink, Route, Routes, Navigate } from 'react-router-dom'
// 使用

    } />
    } />
    {/* 重定向 */}
    } />

04_路由表

        v6中引入了路由表这个概念,简化了注册路由,同时更明显的展示路由的嵌套结构,使用到useRoutes。一般我们会另外创建一个routes文件来单独建立路由表,这样更加清晰明了。

组件

import { NavLink, useRoutes } from 'react-router-dom'
// 引入路由表文件
import routes from './routes'
// 调用useRoutes
const element = useRoutes(routes)
// 路由链接
Home
// 注册路由
{element}

路由表

import Home from '../pages/Home'
import About from '../pages/About'
import { Navigate } from 'react-router-dom'
const routes = [
  {
    path: '/about',
    element: ,
  },
  {
    path: '/home',
    element: ,
  },
  {
    path: '/',
    element: ,
  },
]
export default routes

05-嵌套路由

        嵌套路由我们只需要在路由表中你所需要的组件添加一个children属性

const routes = [
  {
    path: '/about',
    element: ,
  },
  {
    path: '/home',
    element: ,
    // 实现嵌套路由
    children: [
      {
        path: 'news',
        element:
      },
      {
        path: 'message',
        element:
      }
    ]
  },
  {
    path: '/',
    element: ,
  },
]

此时我们会面对一个问题,子路由位置怎么放,这时引入Outlet。类似于vue中的router-view

// 引入
import { Outlet } from 'react-router-dom'
{/* 路由显示位置 */}

06-路由参数传递_params

        v6中params参数的传递和接收没太大变化,但是我们使用params参数时要借助useParams函数

{/* 传递params参数 */}
{item.title}

// 路由表中接收params参数
path: 'detail/:id/:title/:content'

// 使用params参数
import { useParams } from 'react-router-dom'
const { id, title, content } = useParams()

07-路由参数传递_search

        v6中search参数的传递和接收没太大变化,但是我们使用search参数时要借助useSearchParams函数

{/* 传递search参数 */}

    {item.title}
 */}

// 路由表中 无需变化
 path:'detail', //search 参数接收

// 使用search参数
import { useSearchParams } from 'react-router-dom'
const [search] = useSearchParams()
const id = search.get('id')
const title =search.get('title')
const content =search.get('content')

08-路由参数传递_state

        v6中params参数的接收没有太大变化,但传递时我们要在路由链接中直接使用state={{key=value}}来传递,同时我们使用state参数时要借助useLoaction函数

{/* 传递state参数 */}

    {item.title}

 
// 路由表中state参数接收
path:'detail', //state 参数接收

// 使用state参数
import { useLocation } from 'react-router-dom'
const {state:{id,title,content}} = useLocation()

09-编程式路由导航

        v5中我们往往是使用this.prosp.history类似这样的方法进行操作,而在v6中我们使用useNavigate钩子

// 引入
import { useNavigate } from 'react-router-dom'
// 调用
const navigate = useNavigate()
// 使用


10-路由懒加载

        在大型的 React 应用中,为了提高页面加载速度和性能,我们经常会使用懒加载技术来延迟加载组件或资源。懒加载可以将页面初始加载的内容减少到最小,只在需要时再动态加载额外的组件或资源,从而提高页面的加载速度和用户体验

在 React 中,我们可以使用 lazy 函数和 Suspense 组件来实现懒加载。lazy 函数允许我们动态地 import 一个组件,而 Suspense 组件则允许我们在组件加载时显示一个加载指示器。

import React, { Suspense, lazy } from 'react';

const MyComponent = lazy(() => import('./MyComponent'));

function App() {
  return (
    Loading...
}> ); } export default App;

11-剩余Hooks

useInRouterContext()

        -作用:如果组件在的上下文中呈现则该钩子返回true,否则返回false

useNavigate()

        -作用:返回当前的导航类型

        -返回值:PUSH 、POP、REPLACE

        -备注: pop指在浏览器直接打开这个路由组件

useOutlet()

        -作用:用来呈现当前组件中要渲染的嵌套组件

        -示例代码:

const res = useOutlet()
console.log(res)
// 若嵌套路由没有挂载为null
// 已经挂载则展示嵌套的路由组件

 useResolvedPath()

        -作用:给定一个url值,解析其中的path,search,hash值

写在结尾

需要了解v5版本:https://blog.csdn.net/Lil_y1/article/details/140613312?spm=1001.2014.3001.5502

你可能感兴趣的:(React,react.js,javascript,前端,前端框架)