路由

NextUI 元件,例如 TabsListboxDropdown 和許多其他元件,都可彈性地渲染為 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 hook,它會傳回一個可用於執行導航的路由器物件。

如需更多詳細資訊,請參閱 Next.js 文件

新增 useRouter

將 Provider 新增至 Root

現在,前往您的 root 版面配置頁面,並使用 NextUIProvider 包裹它。

注意:如果您已在應用程式中設定 NextUIProvider,請跳過此步驟。

Next.js Base Path (選用)

如果您正在使用 Next.js 的 basePath 設定,您需要配置環境變數才能存取它。

然後,提供自訂的 useHref 函式,將其前置到所有連結的 href。

頁面路由 (Pages Router)

前往頁面 /_app.jspages/_app.tsx (如果不存在,請建立它),並加入來自 next/routeruseRouter hook,它會回傳一個可以用來執行導航的 router 物件。

當使用 basePath 設定選項時,請為傳遞給 Provider 的 router 提供 useHref 選項,以便自動將其添加到連結前面。

React Router

使用來自 react-router-domuseNavigate hook 來取得用於路由的 navigate 函式。 useHref hook 可以與 React Router 的 basename 選項一起使用。

請確保將使用這些 hook 的元件放置在 BrowserRouter 內,並將 <Routes> 保留在 NextUIProvider 內。以下是如何在您的 App 元件中設定它

請確保呼叫 useNavigate 並渲染 NextUIProvider 的元件位於路由元件(例如 BrowserRouter)內,以便它可以存取 React Router 的內部上下文。 React Router 的 <Routes> 元素也應該定義在 NextUIProvider 內,以便渲染路由內的連結可以存取 router。

Remix

Remix 在底層使用 React Router,因此上述的 useNavigateuseHref hook 也適用於 Remix 應用程式。NextUIProvider 應該在每個包含 NextUI 元件的頁面的 root 處渲染,或在 app/root.tsx 中渲染,以將其添加到所有頁面。有關更多詳細資訊,請參閱 Remix 文件

TanStack

若要將 TanStack Router 與 NextUI 一起使用,請在您的根路由內渲染 NextUI 的 RouterProvider。在 navigate prop 中使用 router.navigate,並在 useHref prop 中使用 router.buildLocation

使用範例

現在您已經在應用程式中設定了 NextUIProvider,您可以使用 TabsListboxDropdown 項目中的 href prop 在頁面之間導航。

Link 元件也將使用來自 NextUIProvidernavigate 函式在頁面之間導航。

如需更多關於 React Aria 中路由的資訊,請參閱React Aria 路由指南