react-router-data-mode
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReact Router Data Mode
React Router Data Mode
Data mode uses and 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.
createBrowserRouterRouterProviderData Mode 借助和实现数据加载、actions及pending UI功能,无需依赖框架的Vite插件。这非常适合希望添加数据加载和变更能力的现有React应用。
createBrowserRouterRouterProviderWhen to Apply
适用场景
- Using with route objects
createBrowserRouter - Loading data with property on routes
loader - Handling mutations with property
action - Navigating with ,
<Link>,<NavLink>,<Form>, andredirectuseNavigate - Implementing pending/loading UI states with
useNavigation - Using for mutations without navigation
useFetcher
- 使用搭配路由对象
createBrowserRouter - 通过路由的属性加载数据
loader - 利用属性处理数据变更
action - 使用、
<Link>、<NavLink>、<Form>和redirect进行导航useNavigate - 借助实现pending/加载UI状态
useNavigation - 使用处理无需导航的数据变更
useFetcher
References
参考文档
Load the relevant reference for detailed guidance on the specific API/concept:
| Reference | Use When |
|---|---|
| Configuring routes, nested routes, layout |
| Understanding route object properties |
| Loading data with loaders |
| Handling forms, mutations, validation |
| Links, programmatic navigation, redirects |
| Loading states, optimistic UI |
| Server-side rendering with data mode |
加载相关参考文档以获取特定API/概念的详细指导:
| 参考文档 | 适用场景 |
|---|---|
| 配置路由、嵌套路由、布局 |
| 理解路由对象属性 |
| 使用loaders加载数据 |
| 处理表单、数据变更、验证 |
| 链接、编程式导航、重定向 |
| 加载状态、乐观UI |
| 结合Data Mode实现服务端渲染 |
Critical Patterns
核心模式
These are the most important patterns to follow. Load the relevant reference for full details.
以下是需要遵循的最重要模式。加载相关参考文档以获取完整细节。
Basic Router Setup
基础Router配置
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} />);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 , NOT with :
<Form method="get">onSubmitsetSearchParamstsx
// ✅ Correct
<Form method="get">
<input name="q" />
</Form>
// ❌ Wrong - don't manually handle search params
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>Inline mutations - use , NOT (which causes page navigation):
useFetcher<Form>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 for complete patterns.
references/actions.md搜索表单 - 使用,而非结合的:
<Form method="get">setSearchParamsonSubmittsx
// ✅ 正确
<Form method="get">
<input name="q" />
</Form>
// ❌ 错误 - 不要手动处理搜索参数
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>内联数据变更 - 使用,而非会导致页面导航的:
useFetcher<Form>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>;查看获取完整模式。
references/actions.mdOptimistic UI Pattern
乐观UI模式
Use to show expected results immediately:
fetcher.formDatatsx
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 for complete patterns.
references/pending-ui.md使用立即展示预期结果:
fetcher.formDatatsx
function FavoriteButton({ itemId, isFavorite }) {
const fetcher = useFetcher();
// 乐观更新:使用待处理的表单数据,回退到服务端状态
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.mdFurther Documentation
更多文档
If anything related to React Router is not covered in these references, you can search the official documentation:
如果这些参考文档未涵盖任何与React Router相关的内容,你可以搜索官方文档: