react-router-data-mode
Build React applications using React Router's data mode with createBrowserRouter and RouterProvider. Use when working with route objects, loaders, actions, Form, useFetcher, or pending/optimistic UI without the Vite plugin.
Works with
Agent Skills format with YAML frontmatter. Claude Code reads it as-is.
---
name: "react-router-data-mode"
description: "Build React applications using React Router's data mode with createBrowserRouter and RouterProvider. Use when working with route objects, loaders, actions, Form, useFetcher, or pending/optimistic UI without the Vite plugin."
license: "MIT"
---
# React Router Data Mode
Data mode uses `createBrowserRouter` and `RouterProvider` to enable data loading, actions, and pending UI without the framework's Vite plugin. This is ideal for existing React applications that want to add data loading and mutation capabilities.
## When to Apply
- Using `createBrowserRouter` with route objects
- Loading data with `loader` property on routes
- Handling mutations with `action` property
- Navigating with `<Link>`, `<NavLink>`, `<Form>`, `redirect`, and `useNavigate`
- Implementing pending/loading UI states with `useNavigation`
- Using `useFetcher` for mutations without navigation
## References
Load the relevant reference for detailed guidance on the specific API/concept:
| Reference | Use When |
| ---------------------------- | ----------------------------------------- |
| `references/routing.md` | Configuring routes, nested routes, layout |
| `references/route-object.md` | Understanding route object properties |
| `references/data-loading.md` | Loading data with loaders |
| `references/actions.md` | Handling forms, mutations, validation |
| `references/navigation.md` | Links, programmatic navigation, redirects |
| `references/pending-ui.md` | Loading states, optimistic UI |
| `references/ssr.md` | Server-side rendering with data mode |
## Critical Patterns
These are the most important patterns to follow. Load the relevant reference for full details.
### Basic Router Setup
```tsx
import { createBrowserRouter, RouterProvider } from "react-router";
const router = createBrowserRouter([
{
path: "/",
Component: Root,
children: [
{ index: true, Component: Home },
{ path: "about", Component: About },
],
},
]);
ReactDOM.createRoot(root).render(<RouterProvider router={router} />);
```
### Forms & Mutations
**Search forms** - use `<Form method="get">`, NOT `onSubmit` with `setSearchParams`:
```tsx
// ✅ Correct
<Form method="get">
<input name="q" />
</Form>
// ❌ Wrong - don't manually handle search params
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>
```
**Inline mutations** - use `useFetcher`, NOT `<Form>` (which causes page navigation):
```tsx
const fetcher = useFetcher();
const optimistic = fetcher.formData
? fetcher.formData.get("favorite") === "true"
: isFavorite;
<fetcher.Form method="post" action={`/favorites/${id}`}>
<button>{optimistic ? "★" : "☆"}</button>
</fetcher.Form>;
```
See `references/actions.md` for complete patterns.
### Optimistic UI Pattern
Use `fetcher.formData` to show expected results immediately:
```tsx
function FavoriteButton({ itemId, isFavorite }) {
const fetcher = useFetcher();
// Optimistic: use pending form data, fallback to server state
const optimistic = fetcher.formData
? fetcher.formData.get("favorite") === "true"
: isFavorite;
return (
<fetcher.Form method="post" action={`/items/${itemId}/favorite`}>
<input type="hidden" name="favorite" value={String(!optimistic)} />
<button>{optimistic ? "★" : "☆"}</button>
</fetcher.Form>
);
}
```
See `references/pending-ui.md` for complete patterns.
## Further Documentation
If anything related to React Router is not covered in these references, you can search the official documentation:
https://reactrouter.com/docsMore Frontend Frameworks skills
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
design-taste-frontend
leonxlnx/taste-skill
Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check.
hyperframes-creative
heygen-com/hyperframes
Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.

