К основному содержанию
скилл CX Codex

react-router-v7 — скилл для Claude Code: правила маршрутизации

Скилл с практиками React Router v7: подсказывает, когда брать loader, Form или fetcher, и как настраивать вложенные маршруты.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add existential-birds/beagle --skill react-router-v7 -a claude-code
Открыть на GitHub

Что делает react-router-v7

Скилл описывает data-driven маршрутизацию в React Router v7. Внутри — настройка роутера через createBrowserRouter и RouterProvider, режим Framework с Vite-плагином и файлом routes.ts, вложенные маршруты с Outlet, динамические сегменты вида teams/:teamId, опциональные :lang? и сплаты files/*.

Отдельный блок — последовательность решений. Агент отвечает на вопросы по порядку и останавливается на первом подходящем API: если URL или история должны меняться, берётся <Form> и route action; если мутация остаётся на том же маршруте, идёт useFetcher(). Похожая развилка для данных: нужны они для первого рендера — loader, а если запрос идёт после монтирования по действию пользователя или таймеру — useEffect.

Есть таблица сравнения трёх режимов: Framework, Data и Declarative. Она пригодится, когда проект уже написан на <BrowserRouter> и вы решаете, стоит ли переезжать. Дополнительные материалы лежат в references/loaders.md, references/actions.md, references/navigation.md и references/advanced.md — там про параллельную загрузку, валидацию, защищённые маршруты и ленивую подгрузку.

Какие задачи решает

  • выбрать между <Form> и useFetcher для конкретной мутации
  • настроить вложенные маршруты с Outlet и индексной страницей
  • перенести загрузку данных из useEffect в loader
  • разобрать динамические сегменты и сплаты в путях
  • сравнить Framework, Data и Declarative режимы перед миграцией

Примеры запросов агенту

  • Помоги настроить маршруты через createBrowserRouter для каталога товаров
  • Стоит ли здесь useFetcher или <Form>? Мутация остаётся на той же странице
  • Перепиши загрузку данных на loader и добавь ErrorBoundary

Как установить react-router-v7

1Через Skills CLI (Vercel)

npx skills add existential-birds/beagle --skill react-router-v7 -a claude-code

2Вручную: положить файлы

~/.claude/skills/react-router-v7/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/react-router-v7/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о react-router-v7

Как установить react-router-v7 в Claude?

Выполните npx skills add existential-birds/beagle --skill react-router-v7 -a claude-code. Файл скилла окажется по пути ~/.claude/skills/react-router-v7/SKILL.md.

Что делает react-router-v7?

Даёт агенту справочник по React Router v7: конфигурация маршрутов, загрузка данных, мутации, навигация и защищённые маршруты. Агент опирается на него, когда вы пишете код роутинга.

Чем Framework Mode отличается от Data Mode?

В Framework Mode маршруты описываются в routes.ts через Vite-плагин, типы генерируются автоматически и есть встроенный SSR. В Data Mode роутер собирается вручную через createBrowserRouter, типы и SSR настраиваются сами.

Исходный текст

SKILL.md · Apache-2.0
---
name: react-router-v7
description: 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.
---

# 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.ts
import { 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](references/loaders.md) for loader patterns, parallel loading, search params
- **Mutations**: See [references/actions.md](references/actions.md) for actions, Form, fetchers, validation
- **Navigation**: See [references/navigation.md](references/navigation.md) for Link, NavLink, programmatic nav
- **Advanced**: See [references/advanced.md](references/advanced.md) for error boundaries, protected routes, lazy loading

## Mode Comparison

| Feature | Framework Mode | Data Mode | Declarative Mode |
|---------|---------------|-----------|------------------|
| Setup | Vite plugin | `createBrowserRouter` | `<BrowserRouter>` |
| Type Safety | Auto-generated types | Manual | Manual |
| SSR Support | Built-in | Manual | Limited |
| Use Case | Full-stack apps | SPAs with control | Simple/legacy |

© existential-birds · Apache-2.0 · existential-birds/beagle

Похожие скиллы

Всё по теме «Фронтенд и UI» →
react-router TanStack Скилл для агента по @tanstack/react-router: справочник хуков и компонентов плюс сборка файлового роутинга на Vite от установки до routeTree.gen. CX Codex +1 547установок sentry-react-router-framework-sdk getsentry Помогает настроить мониторинг ошибок и трейсинг в проектах на React Router v7 в режиме Framework mode. Пригодится при подключении пакета @sentry/react-router. CX Codex +1 1 800установок router-core TanStack Скилл-навигатор по TanStack Router: разводит задачу по подскиллам и напоминает про вывод типов и клиентские лоадеры, на которых агенты ломаются. CX Codex +1 589установок tanstack-router-best-practices DeckardGer Набор правил по TanStack Router для React: типизация, загрузка данных, search params и навигация. Пригодится, когда роутинг в проекте разрастается. CX Codex +1 7 100установок tanstack-router tanstack-skills Скилл по TanStack Router для React и Solid: файловый роутинг, поисковые параметры и загрузка данных с проверкой типов. CX Codex +1 4 900установок typescript-react-patterns agent-skills Скилл с 33 правилами типизации React на TypeScript: пропсы, хуки, события, refs, дженерики и контекст. Пригодится, когда агент пишет компоненты и лезет в типы. CX Codex +1 1 100установок

Из того же набора8

react-flow Помогает ассистенту создавать интерактивные диаграммы и графы на базе @xyflow/react. Пригодится при настройке узлов, связей и управлении зумом. CX Codex +1 1 300установок python-code-review Скилл проверяет файлы Python на ошибки в типах, блокирующие вызовы в async-функциях и нарушение PEP8. Пригодится при подготовке пуллреквестов и чистке кодовой базы. CX Codex +1 920установок langgraph-code-review Скилл проверяет код на базе LangGraph в Claude Code и других агентах. Он находит мутации состояния, пропущенные редьюсеры и ошибки в узлах графа. CX Codex +1 884установок tailwind-v4 Скилл для ИИ-агента, который подсказывает, как настроить Tailwind CSS v4: тема в CSS, токены дизайна, цвета OKLCH и тёмная тема. CX Codex +1 812установок vitest-testing Скилл для ИИ-агента: подсказывает, как писать тесты на Vitest — ассерты, моки, асинхронность, конфиг. Пригодится, когда в проекте уже стоит Vitest. CX Codex +1 467установок shadcn-ui Подсказывает агенту, как собирать компоненты на shadcn/ui: Radix, Tailwind, CVA-варианты и data-slot. CX Codex +1 351установок react-flow-code-review Проверяет код на @xyflow/react по чек-листу: антипаттерны, лишние ре-рендеры, типы. Пригодится, когда граф тормозит или ноды пересоздаются. CX Codex +1 319установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой