关于 react-router-data-mode
面向将 React Router Data 模式加入 React 应用的开发者,讲解路由对象配置、数据加载与变更操作,并提供待处理状态和乐观 UI 模式。
主要功能
- 01createBrowserRouter 配置
- 02路由对象设置
- 03基于 loader 加载数据
- 04action 与表单变更
- 05待处理状态与乐观 UI
适用场景
- 01为现有应用添加数据加载
- 02配置路由对象
- 03处理表单提交
- 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.mddata-loading.mdnavigation.mdpending-ui.mdroute-object.mdrouting.mdssr.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} />);
表单与变更
搜索表单 - 使用 <Form method="get">,不要使用带有 setSearchParams 的 onSubmit:
// ✅ Correct
<Form method="get">
<input name="q" />
</Form>
// ❌ Wrong - don't manually handle search params
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>
内联变更 - 使用 useFetcher,不要使用 <Form>(它会触发页面导航):
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 相关的内容,可以搜索官方文档:
评论
支持 Markdown