React Router V7

existential-birds/beagle/plugins/beagle-react/skills/react-router-v7

作者 existential-birdsd1a74899fbfec74974d1818e4cac7c3d54d44b65無授權條款83 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫3 週前更新

React Router v7 best practices for data-driven routing. Use when implementing routes, loaders, actions, Form components, fetchers, navigation guards, protected routes, or URL search params. Triggers on createBrowserRouter, RouterProvider, useLoaderData, useActionData, useFetcher, NavLink, Outlet.

AI 產生的概覽

React Router v7 資料驅動路由最佳實務,涵蓋路由、loader、action、表單、fetcher 與導覽。

功能
此技能提供 React Router v7 在資料驅動路由情境下的最佳實務指引。內容涵蓋使用 createBrowserRouter 與 RouterProvider 設定路由、以 Outlet 實作巢狀路由、動態區段與 splat,以及在 Form 與 useFetcher、loader 與 useEffect 之間做選擇時的決策順序。它也指向關於 loader、action、導覽,以及錯誤邊界、受保護路由等進階主題的參考文件。
適用情境
在實作或檢閱 React Router v7 的路由、loader、action、Form 元件、fetcher、導覽守衛、受保護路由或 URL 搜尋參數時使用。適合涉及 createBrowserRouter、RouterProvider、useLoaderData、useActionData、useFetcher、NavLink 或 Outlet 的問題。
執行需求
不需要指令碼或執行階段相依項目,僅為指示型技能。除閱讀隨附的參考文件外,代理不需要任何套件、認證或網路存取。

React Router v7 Best Practices

Quick Reference

Router Setup (Data Mode):

tsx
import { createBrowserRouter, RouterProvider } from "react-router";
const router = createBrowserRouter([  {    path: "/",    Component: Root,    ErrorBoundary: RootErrorBoundary,    loader: rootLoader,    children: [      { index: true, Component: Home },      { path: "products/:productId", Component: Product, loader: productLoader },    ],  },]);
ReactDOM.createRoot(root).render(<RouterProvider router={router} />);

Framework Mode (Vite plugin):

ts
// routes.tsimport { index, route } from "@react-router/dev/routes";
export default [  index("./home.tsx"),  route("products/:pid", "./product.tsx"),];

Route Configuration

Nested Routes with Outlets

tsx
createBrowserRouter([  {    path: "/dashboard",    Component: Dashboard,    children: [      { index: true, Component: DashboardHome },      { path: "settings", Component: Settings },    ],  },]);
function Dashboard() {  return (    <div>      <h1>Dashboard</h1>      <Outlet /> {/* Renders child routes */}    </div>  );}

Dynamic Segments and Splats

tsx
{ path: "teams/:teamId" }           // params.teamId{ path: ":lang?/categories" }       // Optional segment{ path: "files/*" }                 // Splat: params["*"]

Key Decision Points

Form vs Fetcher

Use <Form>: Creating/deleting with URL change, adding to history Use useFetcher: Inline updates, list operations, popovers - no URL change

Loader vs useEffect

Use loader: Data before render, server-side fetch, automatic revalidation Use useEffect: Client-only data, user-interaction dependent, subscriptions

Gates (decision sequencing)

Answer in order. Pass means the condition is true; pick the API on the same line and stop.

<Form> vs useFetcher

  1. Must the URL or history stack change (bookmark/share, back returns to prior screen)?
    • Pass → <Form> / route action (or useSubmit + navigation). Stop.
    • Fail → Step 2.
  2. Mutation stays on the same route (inline edit, modal, list row, no address change)?
    • Pass → useFetcher(). Stop.
    • Fail → Re-check step 1; you may need a dedicated action route or POST to the current URL.

loader vs useEffect

  1. Is data needed for correct first render (or your intended <Suspense> boundary) for this route?
    • Pass → loader (Framework: clientLoader when appropriate). Stop.
    • Fail → Step 2.
  2. Fetch only after mount from user action, timer, or subscription (not route entry)?
    • Pass → useEffect / event handlers. Stop.
    • Fail → Prefer loader + revalidation over an effect that mirrors navigation.

Additional Documentation

  • Data Loading: See references/loaders.md [blocked] for loader patterns, parallel loading, search params
  • Mutations: See references/actions.md [blocked] for actions, Form, fetchers, validation
  • Navigation: See references/navigation.md [blocked] for Link, NavLink, programmatic nav
  • Advanced: See references/advanced.md [blocked] for error boundaries, protected routes, lazy loading

Mode Comparison

FeatureFramework ModeData ModeDeclarative Mode
SetupVite plugincreateBrowserRouter<BrowserRouter>
Type SafetyAuto-generated typesManualManual
SSR SupportBuilt-inManualLimited
Use CaseFull-stack appsSPAs with controlSimple/legacy

來源與署名

來源:existential-birds/beagle位於plugins/beagle-react/skills/react-router-v7提交d1a7489

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架