Skip to content

React Router API ​

核心 Router 组件 ​

<RouterProvider /> ​

挂载整个路由系统(路由入口),需配合 createBrowserRouter / createHashRouter 使用。

tsx
const router = createBrowserRouter(routes)

<RouterProvider router={router} />

不再推荐 <BrowserRouter> + <Routes> 作为主流方案

createBrowserRouter

创建基于 History API 的路由:

ts
createBrowserRouter([
  {
    path: "/",
    element: <Layout />,
    children: [...]
  }
])

<Outlet /> ​

子路由占位符:

tsx
function Layout() {
  return (
    <>
      <Header />
      <Outlet />
    </>
  )
}

基础导航。

tsx
<Link to="/about">About</Link>

带 active 状态的导航。

tsx
<NavLink to="/home" className={({ isActive }) => (isActive ? 'active' : '')} />

声明式跳转(重定向)。

tsx
<Navigate to="/login" replace />

核心 Router Hooks ​

useLoaderData() ​

读取当前路由的 loader 返回值。

ts
const data = useLoaderData()

useRouteLoaderData(routeId) ​

读取 指定路由 的 loader 数据。

ts
useRouteLoaderData('root')

useMatches() ​

获取当前匹配到的所有路由信息。

ts
const matches = useMatches()

useNavigate() ​

命令式跳转。

ts
const navigate = useNavigate()
navigate('/login')

useNavigation() ​

获取全局导航状态(loading / submitting)。

ts
const navigation = useNavigation()
navigation.state // idle | loading | submitting

useRevalidator() ​

手动触发 loader 重新执行。

ts
const revalidator = useRevalidator()
revalidator.revalidate()

useParams() ​

获取路径参数。

ts
const { id } = useParams()

useSearchParams() ​

操作 URL 查询参数。

ts
const [params, setParams] = useSearchParams()

useLocation() ​

获取当前 location 对象。

ts
const location = useLocation()

useOutletContext<T>() ​

获取父级 Outlet 传递的数据。

ts
useOutletContext<MyContext>()

useRouteError() ​

读取 loader / action 抛出的错误。

ts
const error = useRouteError()

isRouteErrorResponse() ​

判断是否是路由错误响应。

ts
if (isRouteErrorResponse(error)) {
  error.status
}

基于 MIT 许可发布