React:Router-1.BrowserRouter组件式

使用步骤
  1. 安装 react-router-dom 依赖
$ npm install react-router-dom@6
  1. 导入 BrowserRouter, Link, Routes, Route 对象
import {BrowserRouter, Link, Routes, Route} from 'react-router-dom';

3.BrowserRouter:history模式路由; HashRouter:哈希模式路由
示例:

// app.js
import React from "react";
import {BrowserRouter, Link, Routes, Route} from 'react-router-dom';
import Home from './Home';
import About from "./About";

function App() {
  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>
      </Routes>
    </BrowserRouter>
  )
}

export default App;


// About.js

function About() {
    return (
        <div>关于</div>
    )
}

export default About;

// Home.js

function Home() {
    return (
        <div>首页</div>
    )
}

export default Home;

在这里插入图片描述

编程式导航

使用 useNavigate 函数实现

// 1.导入 useNavigate 函数
import {useNavigate} from 'react-router-dom';

function Home() {
    const navigate = useNavigate();

    // 2.跳转到 Login 组件
    const goLogin = () => {
      navigate('/Login');
    }

    return (
        <div>首页
            <button onClick={goLogin}>登录</button>
        </div>
    )
}

export default Home;

路由传参
1. /about?id=100&name=李白
// 传参
navigate('/Login?id=1001&name=李白');

// 取参数
import {useSearchParams} from 'react-router-dom';

const [params] = useSearchParams();
const id = params.get("id");
const name = params.get("name");
2./about/1000
// 传参
navigate('/Login/1000');

// 取参数
import {useParams} from 'react-router-dom';

const params = useParams();
const id = params.id
嵌套路由

Outlet 声明嵌套路由出口
如下 Layout 下边包含两个 二级路由 UserInfo
其中,通过增加 index属性 来设置默认项

// Layout.jsx
import { Outlet } from "react-router-dom";

export default function Layout() {
    return (
        <div>
            Layout
            {/* 二级路由出口 */}
            <Outlet></Outlet>
        </div>
    )
}

// App.js
function App() {

  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>
        <Route path="/Login" element={<Login/>}></Route>
        <Route path="/Layout" element={<Layout/>}>
          {/** index 设置该路由为默认项 */}
          <Route index element={<Info/>}></Route>
          <Route path="User" element={<User/>}></Route>
        </Route>
      </Routes>
    </BrowserRouter>
  )
}

在这里插入图片描述

404匹配
function App() {

  return (
    <BrowserRouter>
      <Link to="/">首页</Link>
      <Link to="/about">关于</Link>

      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/About" element={<About />}></Route>]
        {/** 所有路由都未匹配上 404兜底 */}
        <Route path="*" element={<NotFound />}></Route>
      </Routes>
    </BrowserRouter>
  )
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值