React-Router v6 使用教学

本文介绍了React-RouterV6的使用,包括Route的简洁配置,Link和useNavigate的页面跳转方法,urlSearchParams实现参数传递,嵌套路由的设置,以及自定义id的获取。通过实例展示了如何在项目中实现路由的常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React-Router v6 使用教学

前言

React-Router V6 出版一段时间,前端的小伙伴们也开始向着 v6 版本进行升级。v5 和 v6 的版本 api 有些差异。

对此写一篇文档整理了下 v6 的使用教学,文章已实际使用为主。

进入正题:

一、Route

Route 的使用变得更加简洁,可读性更高。

import { HashRouter, Route, Routes } from "react-router-dom";

<HashRouter>
  <Routes>
    <Route path="/" element={<Index />} />
    <Route path="/home" element={<Home />} />
    <Route path="/user:userId" element={<User />} />
  </Routes>
</HashRouter>;

二、页面跳转

1、Link 跳转

import { Link } from "react-router-dom";

export default Page = () => {
  return (
    <>
      <div>
        <Link to="home">to home page</Link>
      </div>
      // 跳转页面进行替换路由
      <div>
        <Link replace to="home">
          to home page
        </Link>
      </div>
      // 用户可以在这里自定义 userId
      <div>
        <Link to="user:123">to user page</Link>
      </div>
    </>
  );
};

2、方法跳转

这里介绍用户常用的跳转方式,第二个入参可选的配置参数。

import { useNavigate } from "react-router-dom";

export default Page = () => {
  let navigate = useNavigate();
  return (
    <>
      <button onClick={() => navigate("/home")}>跳转到 home 页面</button>
      <button onClick={() => navigate("/home", { replace: true, state: {} })}>替换到 home 页面</button>
    </>
  );
};
  • replace: 用户配置是否是替换路由,而非创建路由。
  • state: 用户参数传递,但是这些参数并不会在 url 上体现。而是存在了 state 里,这就要保证用户必须是从某个页面跳转过来,并且 state 有配置参数。如果用户是直接访问该链接,那么就无法拿到 state 里的数据。

如果需要回退页面的话,使用 navigate(-1) 即可。

三、urlSearchParams 实现路由参数拼接

umi 或者 alita 项目中,可以使用 locaiton.query 或者链接上的参数,并整合成对象。而新的 router 不再提供这种能力的支持。

推荐使用 URLSearchParams

项目中引入 url-search-params-polyfill

yarn add url-search-params-polyfill

在全局里引入 url-search-params-polyfill:

/src/index.ts: import 'url-search-params-polyfill';

使用方式如下:

let searchParams = new URLSearchParams({ name: "hang" });
searchParams.append("age", "18");
navigate(`/home?${searchParams.toString()}`);

将对象转化成 url 拼接的形式,拼接在跳转链接后,通过 navigate 实现跳转。

跳转后,在目标页面上获取对应的数据:

let location = useLocation();
let urlParams = new URLSearchParams(location.search);
const obj = {} as any;
urlParams.forEach((value, key) => (obj[key] = value));

或者可以写一个工具方法来实现:

import qs from "qs";

const useQueryUrl = (props) => {
  const { location, match } = props;
  const { search } = location;

  const matchParams = match?.params || {};

  return {
    matchParams,
    searchParams: qs.parse(search, { ignoreQueryPrefix: true }),
  };
};

export default useQueryUrl;

四、嵌套路由

请添加图片描述

这就是需求实现的效果。

要实现局部路由的效果,首先 <Route> 需要实现嵌套。

<Routes>
  <Route path="/" element={<Index />} />
  <Route path="/home" element={<Home />}>
    <Route path="/home/one" element={<HomeOne />} />
    <Route path="/home/two" element={<HomeTwo />} />
  </Route>
  <Route path="/user:userId" element={<User />} />
</Routes>

嵌套的路由通过 <Outlet /> 展示。

所以在 /home 文件下用 <Outlet /> 代替 <HomeOne /><HomeTwo /> 的展示。

import React from "react";
import { useLocation, Outlet, useNavigate } from "react-router-dom";

const HomePage = (props) => {
  let location = useLocation();
  let navigate = useNavigate();
  let urlParams = new URLSearchParams(location.search);
  const obj = {} as any;
  urlParams.forEach((value, key) => (obj[key] = value));

  return (
    <div>
      this is home
      <button onClick={() => navigate("/home/one")}>前往 homeOne 局部页面</button>
      <button onClick={() => navigate("/home/two")}>前往 homeTwo 局部页面</button>
      <Outlet />
    </div>
  );
};

export default HomePage;

五、自定义 id

在跳转页面时若需要带上自定义的 id,我们需要从定义开始重新配置,但是实现流程非常简单。

定义路由:

<Route path="/user:userId" element={<User />} />

页面跳转:

<Link to="user:123">to user page</Link>

// or:

<button onClick={() => navigate("/user:111")}>跳转到 user 页面</button>

在目标页面获取自定义 id

import React from "react";
import { useParams } from "react-router-dom";

const UserPage = () => {
  let { userId } = useParams();
  return <div>this is user, userId is: {userId}</div>;
};

export default UserPage;

以上就是我整理的较为常用的路由操作,本文重在实际操作,理论依据或者需要完整的 api 请小伙伴们参考React Router v6 迁移指南

代码地址

React Router DOM v6个用于 React 应用程序的路由库。它提供了种在应用程序中进行页面导航和管理的方式。 下面是个简单的使用教程来帮助你开始使用 React Router DOM v6: 1. 安装 React Router DOM v6: ```shell npm install react-router-dom@next ``` 注意:v6 目前仍然是预发布版本,所以需要添加 `@next` 后缀来安装最新版本。 2. 在你的应用程序的入口文件(通常是 `index.js`)中导入所需的组件: ```jsx import { BrowserRouter as Router, Route, Link } from 'react-router-dom'; ``` 3. 使用 `Router` 组件将你的应用程序包裹起来,并定义你的路由规则: ```jsx ReactDOM.render( <Router> <Route path="/" component={App} /> </Router>, document.getElementById('root') ); ``` 这个例子中,所有匹配 `/` 路径的组件都将渲染 `App` 组件。 4. 在你的应用程序的其他组件中使用 `Link` 组件来创建导航链接: ```jsx import { Link } from 'react-router-dom'; function Navigation() { return ( <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/contact">Contact</Link> </li> </ul> </nav> ); } ``` 这个例子中,点击链接将会导航到对应的路径。 5. 在你的应用程序的其他组件中使用 `Route` 组件来定义不同路径下的组件渲染: ```jsx import { Route } from 'react-router-dom'; function App() { return ( <div> <h1>My App</h1> <Route exact path="/" component={HomePage} /> <Route path="/about" component={AboutPage} /> <Route path="/contact" component={ContactPage} /> </div> ); } ``` 这个例子中,`HomePage` 组件将会在 `/` 路径下渲染,`AboutPage` 组件将会在 `/about` 路径下渲染,`ContactPage` 组件将会在 `/contact` 路径下渲染。 这只是 React Router DOM v6些基本用法,还有很多其他功能和概念可以学习。你可以查阅官方文档以获取更多详细的信息和示例代码:https://reactrouter.com/docs/en/v6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值