mcpField
R
react-router-data-mode

react-router-data-mode

github.com/remix-run開発134883 回インストール19 週間前に更新
リポジトリ

react-router-data-mode について

ReactアプリにReact Router Dataモードを導入する開発者向けのガイダンススキルです。ルートオブジェクトの設定、データ読み込みや変更処理に加え、処理中表示と楽観的UIのパターンを説明します。

主な機能

  1. 01createBrowserRouterの設定
  2. 02ルートオブジェクトの構成
  3. 03loaderによるデータ読み込み
  4. 04actionとフォーム変更
  5. 05処理中表示と楽観的UI

活用シーン

  1. 01既存アプリへのデータ読み込み追加
  2. 02ルートオブジェクトの設定
  3. 03フォーム送信の処理
  4. 04楽観的な変更結果の表示

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/remix-run/agent-skills --skill react-router-data-mode

インストール後、Claude Code で/react-router-data-modeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
actions.md
data-loading.md
navigation.md
pending-ui.md
route-object.md
routing.md
ssr.md

詳細

React Router データモード

データモードでは、createBrowserRouter と RouterProvider を使用して、フレームワークの Vite プラグインなしでデータの読み込み、アクション、保留中の UI を有効にします。データの読み込みや変更の機能を追加したい既存の React アプリケーションに最適です。

適用する場面

  • ルートオブジェクトを使って createBrowserRouter を使用する場合
  • ルートの loader プロパティを使ってデータを読み込む場合
  • action プロパティを使って変更を処理する場合
  • <Link>、<NavLink>、<Form>、redirect、useNavigate を使って移動する場合
  • useNavigation を使って保留中/読み込み中の UI 状態を実装する場合
  • 移動せずに変更を行うために useFetcher を使用する場合

参考資料

特定の API/概念について詳しく知るには、該当する参考資料を読み込んでください。

参考資料使用する場面
references/routing.mdルート、ネストされたルート、レイアウトの設定
references/route-object.mdルートオブジェクトのプロパティを理解する
references/data-loading.mdローダーを使ったデータの読み込み
references/actions.mdフォーム、変更、検証の処理
references/navigation.mdリンク、プログラムによる移動、リダイレクト
references/pending-ui.md読み込み状態、楽観的 UI
references/ssr.mdデータモードでのサーバーサイドレンダリング

重要なパターン

以下は、必ず従うべき重要なパターンです。詳細については、該当する参考資料を読み込んでください。

基本的なルーターの設定
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} />);
フォームと変更

検索フォーム — setSearchParams を使った onSubmit ではなく、<Form method="get"> を使用してください。

// ✅ Correct
<Form method="get">
  <input name="q" />
</Form>

// ❌ Wrong - don't manually handle search params
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>

インライン変更 — ページ遷移が発生する <Form> ではなく、useFetcher を使用してください。

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>;

すべてのパターンについては、references/actions.md を参照してください。

楽観的 UI のパターン

fetcher.formData を使って、想定される結果をすぐに表示します。

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>
  );
}

すべてのパターンについては、references/pending-ui.md を参照してください。

詳細なドキュメント

React Router に関する内容がこれらの参考資料で扱われていない場合は、公式ドキュメントを検索できます。

https://reactrouter.com/docs

コメント