React Router V6 使用方法

本文介绍 react-router-dom V6 版本的基本使用方法。V6 版本对 API 进行了大量重构,因此本文内容不适用于 V6 以下版本。

安装

npm i react-router-dom

路由配置方式

方式一:createBrowserRouter(推荐)

使用 createBrowserRouter 方法创建路由对象,并用 RouterProvider 渲染该路由。

import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import About from './About';
import Home from './Home';
import Error404 from './Error404';

const router = createBrowserRouter([
  {
    path: '/',
    element: <Home />,
  },
  {
    path: '/about',
    element: <About />,
  },
  {
    path: '*', // 通配符匹配,用于 404 错误页面
    element: <Error404 />,
  },
]);

export default function IndexRouter() {
  return <RouterProvider router={router} />;
}

方式二:组件写法(BrowserRouter + Routes)

使用 JSX 组件嵌套的方式声明路由,更接近 V5 风格。

import { BrowserRouter, Routes, Route } from 'react-router-dom';
import About from './About';
import Home from './Home';
import Error404 from './Error404';

export default function IndexRouter() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="*" element={<Error404 />} />
      </Routes>
    </BrowserRouter>
  );
}

V6 主要变化说明

特性V5V6
Switch 组件<Switch>改为 <Routes>
路由匹配需要加 exact 精确匹配默认精确匹配
嵌套路由在子组件内定义统一在父路由中用 <Outlet> 占位
编程式导航useHistory改为 useNavigate
路由参数useParams保持不变