react-router-data-mode
React Routerのデータモードを利用してReactアプリケーションを構築し、データロードと管理を最適化し、ユーザーエクスペリエンスとパフォーマンスを向上させます。
npx skills add remix-run/agent-skills --skill react-router-data-modeBefore / After 効果比較
1 组従来のReactアプリケーション開発では、データ取得と状態管理がコンポーネントのレンダリングロジックと密接に結合していることが多く、コードが複雑で保守が困難になり、ウォーターフォールローディングの問題が発生し、ユーザーエクスペリエンスに深刻な影響を与える可能性があります。開発者はデータロードの状態とエラー処理を手動で管理する必要があり、開発負担とエラー発生の可能性が増大します。
React Routerのデータパターンを採用することで、データロードがルーティングと密接に統合され、宣言的なデータ取得が可能になります。これにより、コンポーネントロジックが大幅に簡素化され、コードの可読性と保守性が向上します。プリロードと並列ロードのメカニズムは、ウォーターフォールローディングを効果的に回避し、アプリケーションのパフォーマンスとユーザーエクスペリエンスを大幅に最適化し、より効率的な開発を実現します。
description SKILL.md
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
createBrowserRouterwith route objects - Loading data with
loaderproperty on routes - Handling mutations with
actionproperty - Navigating with
<Link>,<NavLink>,<Form>,redirect, anduseNavigate - Implementing pending/loading UI states with
useNavigation - Using
useFetcherfor 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
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:
// ✅ 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):
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:
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:
forumユーザーレビュー (0)
レビューを書く
レビューなし
統計データ
ユーザー評価
この Skill を評価