Skip to main content

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.

来源信息

仓库
halo-dev/upage
最近来源活动
2026年4月22日 04:45
检测到的 SKILL.md 语言
英语
星标
557
Forks
105

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
8 个文件

正在显示 SKILL.md

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 `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/docs
在 GitHub 查看