路由

NextUI 组件,例如 Tabs(选项卡)Listbox(列表框)Dropdown(下拉菜单) 以及许多其他组件,都提供了以 HTML 链接 形式渲染的灵活性。

简介

默认情况下,当链接被交互时,会执行原生浏览器导航。然而,许多应用和框架使用客户端路由器来避免在页面之间导航时重新加载整个页面。

NextUIProvider 组件配置它内部的所有 NextUI 组件,以使用您提供的客户端路由器进行导航。

在您的应用程序的 root 中设置一次,任何带有 href 属性的 NextUI 组件将自动使用您的路由器进行导航。

NextUIProvider 设置

NextUIProvider 组件接受 navigateuseHref 属性。navigate 是用于客户端导航的路由器函数,而 useHref 可选择将路由器 href 转换为原生 HTML href。以下是模式:

注意:下面显示了特定于框架的示例。

路由器选项

所有 NextUI 链接组件都接受一个 routerOptions 属性,该属性将选项传递给路由器的导航函数,以控制滚动和历史导航等行为。

当使用 TypeScript 时,您可以全局配置 RouterConfig 类型,以便所有链接组件都具有自动完成和类型安全,使用您的路由器提供的类型。

Next.js

App Router

转到您的 app/providers.tsxapp/providers.jsx (如果它不存在则创建它),并添加来自 next/navigationuseRouter 钩子,它返回一个可用于执行导航的路由器对象。

有关更多详细信息,请查看 Next.js 文档

添加 useRouter

将 Provider 添加到根目录

现在,转到您的 root 布局页面,并用 NextUIProvider 包裹它

注意:如果您已经在您的应用程序中设置了 NextUIProvider,请跳过此步骤。

Next.js 基础路径 (可选)

如果您正在使用 Next.js 的 basePath 设置,则需要配置一个环境变量才能访问它。

然后,提供一个自定义的 useHref 函数,将其添加到所有链接的 href 前面。

页面路由器

转到 pages/_app.jspages/_app.tsx(如果不存在则创建它),并添加来自 next/routeruseRouter hook。它返回一个路由器对象,可用于执行导航。

当使用 basePath 配置选项时,请为传递给 Provider 的路由器提供 useHref 选项,以便自动将其添加到链接中。

React 路由器

使用来自 react-router-domuseNavigate hook 来获取用于路由的 navigate 函数。useHref hook 可以与 React Router 的 basename 选项一起使用。

确保将使用这些 hook 的组件放置在 BrowserRouter 内部,并将 <Routes> 保留在 NextUIProvider 内部。以下是如何在您的 App 组件中设置它的方法

确保调用 useNavigate 并渲染 NextUIProvider 的组件位于路由器组件(例如,BrowserRouter)内部,以便它可以访问 React Router 的内部上下文。React Router 的 <Routes> 元素也应该在 NextUIProvider 内部定义,以便渲染的路由内的链接可以访问路由器。

Remix

Remix 在底层使用 React Router,因此上面描述的相同的 useNavigateuseHref hook 也适用于 Remix 应用程序。NextUIProvider 应该在包含 NextUI 组件的每个页面的 root 处呈现,或者在 app/root.tsx 中呈现,以将其添加到所有页面。有关更多详细信息,请参阅 Remix 文档

TanStack

要将 TanStack 路由器与 NextUI 一起使用,请在根路由内部渲染 NextUI 的 RouterProvider。在 navigate 属性中使用 router.navigate,并在 useHref 属性中使用 router.buildLocation

使用示例

现在您已经在您的应用程序中设置了 NextUIProvider,您可以使用 TabsListboxDropdown 项目中的 href 属性在页面之间导航。

Link 组件也会使用 NextUIProvider 中的 navigate 函数在页面之间导航。

有关 React Aria 中路由的更多信息,请访问 React Aria 路由指南