react-router-dom@6.x的使用

导航模式

hash模式
// src/index.js
import { HashRouter } from 'react-router-dom'
import App from './App'
root.render(
	<HashRouter>
    	<App></App>
    </HashRouter>
)
history方
// src/index.js
import { BrowserRouter } from 'react-router-dom'
import App from './App'
root.render(
	<BrowserRouter>
    	<App></App>
    </BrowserRouter>
)

声明方式1

嵌套子路由方式1

// App.js变化
<Routes>
    <Route path="/home" element={<Home />} />
    <Route path="/about" element={<About />} />
    {/*嵌套子路由*/}
    <Route path="/about/*" element={<About />} />
    {/*重定向页面*/}
    <Route path="/" element={<Navigate replace to="/home" />} />
</Routes>
// /src/components/About.jsx
import React from 'react'
import { Route, NavLink, Routes, Navigate } from 'react-router-dom'
import Email from './Email'
import Tel from './Tel'
export default function About() {
  return (
    <div className="about container">
      <h1 className="page-header">使用说明</h1>
      <p>通过此系统来熟悉 react 以及 react router 的使用</p>
      <div>
        <NavLink to="/about/email" className="navigation">邮箱</NavLink>
        <NavLink to="/about/tel" className="navigation">电话</NavLink>
      </div>
      <div>
        <Routes>
          <Route path='' element={<Navigate to='email' replace />} />
          <Route path='email' element={<Email />}/>
          <Route path='tel' element={<Tel />} />
        </Routes>
      </div>
    </div>
  )
}
嵌套子路由方式2
import { NavLink, Route, Routes, Navigate } from 'react-router-dom'
import './css/App.css'
import Home from './views/Home';
import About from './views/About';
import Email from './components/Email';
import Tel from './components/Tel';

function App() {
  return (
    <div className="App">
      <div>
        <NavLink to="/home" className="navigation">首页</NavLink>
        <NavLink to="/about" className="navigation">关于我</NavLink>
      </div>
      <Routes>
        <Route path='/home' element={ <Home /> } />
        <Route path='/about/*' element={ <About /> } >
          <Route path='email' element={ <Email /> } />
          <Route path='tel' element={ <Tel /> } />
          <Route path='' element={ <Navigate to="email" replace /> } />
        </Route>
        <Route path='/' element={ <Navigate to="/home" replace /> } />
      </Routes>
    </div>
  );
}

export default App;
// /src/components/About.jsx
import React from 'react'
import { Outlet, NavLink } from 'react-router-dom'

export default function About() {
  return (
    <div className="about container">
      <h1 className="page-header">使用说明</h1>
      <p>通过此系统来熟悉 react 以及 react router 的使用</p>
      <NavLink to="/about/email" className="navigation">邮箱</NavLink>
      <NavLink to="/about/tel" className="navigation">电话</NavLink>
      <Outlet />
    </div>
  )
}

声明方式2

常规路由和嵌套子路由
// router/index.js
import { useRoutes, Navigate } from 'react-router-dom'
import Home from '../components/Home'
import About from '../components/About'
import Email from '../components/Email'
import Tel from '../components/Tel'
function Router(props) {
  return useRoutes([
    {
      path: '/home',
      element: <Home />
    },
    {
      path: '/about',
      element: <About />,
      children: [
        {
          path: 'email',
          element: <Email />
        },
        {
          path: 'tel',
          element: <Tel />
        },
        {
          // 重定向到那个页面
          path: '',
          element: <Navigate replace to="email" />
        }
      ]
    },
    {
      // 重定向到那个页面
      path: '/',
      element: <Navigate replace to="/home" />
    },
  ])
}

export default Router;

路由跳转方式

声明式跳转
import { NavLink } from 'react-react-dom'
// ...省略相关代码
// NavLink生成的是a标签
return(
    <div>
        <NavLink to="/home">首页</NavLink>
    </div>
)
编程式跳转
import { useNavigate } from 'react-react-dom'
// ...省略相关代码
const navigate = useNavigate()
return(
    <div>
        <div onClick={() =>navigate('/home') }>去首页</div>
    </div>
)

路由传参

import { useNavigate } from 'react-router-dom'
// ...省略相关代码
const navigate = useNavigate()

// 返回上一级
navigate(-1)

// 去对应的用户详情
navigate(`/user/{id}`)

// 如果需要类比隐式传参,可以添加参数state
navigate('/home', {
    state: {
        alert: "删除学生成功",
        type: "info"
    }
})

// 如果需要类比 history.replace, 可以添加参数replace为true
navigate('/home', { replace: true })

// 同时 link 也添加了单独的参数 state
const state = {
     alert: "删除学生成功",
     type: "info"
}
<navLink to="/home" state={state} />

获取路由中的参数

获取prams参数
import { useParams } from 'react-router-dom'
// ...省略相关代码
const { id } = useParams()
获取query参数
import { useLocation } from 'react-router-dom'
// 获取隐式传参
const location = useLocation()
if(location) {
    //返回参数location.state ...做响应的逻辑判断
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值