create-route
指导在前端项目中按团队规范创建和维护路由(React Router Data Router),涵盖路由单源、页面目录、路由模块注册、懒加载、标题与守卫等约束。当前端需要新增或重构页面路由时使用本技能。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
指导在前端项目中按团队规范创建和维护路由(React Router Data Router),涵盖路由单源、页面目录、路由模块注册、懒加载、标题与守卫等约束。当前端需要新增或重构页面路由时使用本技能。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
检查 .agents 下 rules、skills、README 与模板基线依赖的一致性,避免规则漂移、悬空引用和 React 能力越界。修改或新增 .agents 内容时使用本技能。
指导在前端项目中按团队规范创建和维护接口请求层,涵盖统一请求客户端、业务 API 文件、类型组织、错误处理、mock 过渡与 React 使用边界。当前端需要新增或重构接口时使用本技能。
指导在前端项目中按团队规范创建和维护 React 组件,涵盖通用组件与页面级组件的边界、目录结构、样式隔离、类型设计与导出策略。当前端需要新增、拆分或沉淀组件时使用本技能。
指导在前端项目中按团队规范使用 Zustand 创建和维护全局状态 store,包括目录结构、命名与持久化策略。当前端需要新增或重构状态管理时使用本技能。
指导在前端项目中正确使用 Ant Design 与自定义主题 CSS 变量,避免硬编码颜色并保证暗色/浅色主题切换一致性。当前端编写或修改样式时使用本技能。
React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.
| name | create-route |
| description | 指导在前端项目中按团队规范创建和维护路由(React Router Data Router),涵盖路由单源、页面目录、路由模块注册、懒加载、标题与守卫等约束。当前端需要新增或重构页面路由时使用本技能。 |
src/routes/ 与 src/views/ 口径meta 或 handle 之外的元信息模型,不得自行发明新字段体系在开始创建之前,请务必阅读以下关键规范:
必读规范:
.agents/rules/03-项目结构.md - 目录结构要求(特别是 index.module.scss).agents/rules/06-路由规范.md - 路由配置约束模板路由实现要点(先对齐再动手):
createBrowserRouter + RouterProvider)。src/routes/index.tsx 创建;路由表只允许在一个入口维护或由 src/routes/modules/**/*.tsx 统一聚合。Suspense。loader、标题和守卫逻辑;禁止在页面里用 useEffect 做登录判断再跳转。meta 或 handle 其中一种,不得混用两套口径。常见错误警告:
kebab-case(如 /user-settings);动态参数使用 camelCase(如 /:userId),避免无语义的 /:id(除非团队明确同意)。<BrowserRouter><Routes> 另一套路由系统。<Routes> 维护“子路由系统”(除非明确为独立子应用/微前端,并在架构文档写清边界)。index.module.scss。meta 还是 handle 作为元信息承载;新增路由时保持全局唯一口径errorElement,新增路由时不得破坏唯一性Suspense本模板新增一个“页面路由”,通常涉及两处(页面实现 + 路由模块声明),并由“路由聚合器”自动汇总:
# 1) 页面实现(最终被路由渲染)
src/views/login/
├─ index.tsx
└─ index.module.scss
# 2) 路由声明(单源:只在 routes/modules 维护)
src/routes/modules/base.tsx # 或按业务域拆分为新 module 文件
# 3) 路由聚合与统一配置(无需改动,但要知道它们存在)
src/routes/index.tsx # createBrowserRouter(routes)
src/routes/modules/ # 路由模块片段
src/routes/guards/ # 守卫(可选)
src/routes/utils/ # LazyLoad 等路由工具(可选)
关键要求:
src/views/<page-name>/index.tsx 为入口;页面名建议 kebab-case(对齐项目结构规则)。index.module.scss(非 .scss)。src/routes/index.tsx 或 src/routes/modules/**/*.tsx 增改路由对象;禁止在页面里注册路由。kebab-case;动态参数 camelCase;资源型路由推荐:/users、/users/:userId、/users/:userId/edit。// src/views/login/index.tsx
import styles from './index.module.scss';
export default function LoginPage() {
return <div className={styles.page}>Login</div>;
}
验证点:
src/views/<page>/index.tsx./index.module.scss模板推荐使用统一懒加载装配,一般不需要为每个页面创建独立的 Loader.tsx 文件;请在路由模块里使用统一封装的懒加载方法包装页面即可(统一 fallback/动画,减少重复代码)。
// src/routes/modules/base.tsx(示例片段)
import { lazy } from 'react';
import { LazyLoad } from '../utils/LazyLoad';
export const loginRoute = {
path: '/login',
meta: { title: '登录' },
element: LazyLoad(lazy(() => import('@/views/login'))),
};
验证点:
Suspense)webpackChunkName 注释meta.title 已配置(用于统一设置 document.title)在本模板中,“注册路由”指的是:在 src/routes/index.tsx 或 src/routes/modules/**/*.tsx 中维护路由对象,并保持全局只有一份唯一路由表入口。
// src/routes/modules/base.tsx(示例:独立页面)
import { lazy } from 'react';
import type { routeItem } from '../index';
import { LazyLoad } from '../utils/LazyLoad';
const routes: routeItem[] = [
{
path: '/login',
meta: { title: '登录' },
element: LazyLoad(lazy(() => import('@/views/login'))),
},
];
export default routes;
验证点:
src/routes/index.tsx 或 src/routes/modules/**/*.tsx 增改路由(单源)path 命名符合规范(静态段 kebab-case;动态参数 camelCase)meta.title 必填(标题统一由路由入口处理)element 使用 LazyLoad(lazy(() => import('@/views/...'))) 装配布局嵌套路由应由父级
element承载布局,children声明嵌套页面。不要在子页面里复制粘贴公共布局。
创建完成后,检查目录结构是否符合规范:
# 页面实现
src/views/<page>/
├─ index.tsx ✓
└─ index.module.scss ✓(优先)
# 路由声明(单源)
src/routes/modules/<module>.tsx ✓(已声明 path/element/meta)
额外一致性检查:
/ 默认重定向与 /* 404 兜底仍保持唯一且可达(不要在别处重复定义 *)。errorElement 仍存在且职责清晰。如果页面需要专用组件,创建 components/ 目录:
src/views/<page-name>/
├─ index.tsx
├─ index.module.scss
└─ components/ # 页面专用组件
└─ ComponentName/
├─ index.tsx
└─ index.module.scss
组件放置规则(详见 .agents/rules/04-组件规范.md):
src/views/<page>/components/src/components/创建完成后,逐项核对:
src/routes/index.tsx 或 src/routes/modules/**/*.tsx 维护路由对象;未引入第二套路由系统kebab-case;动态参数 camelCase;资源型路由写法清晰Suspensemeta.title,标题由统一路由入口设置(不在页面里散落设置)meta 或 handle 其中一种;新增路由未引入第二套字段loader(或团队统一 wrapper)中,禁止页面 useEffect 跳转/ 默认重定向与 /* 兜底路由保持唯一,不在多个模块重复定义 *src/views/<page>/index.tsx 存在且默认导出;样式优先 index.module.scsssrc/views/<page>/components/;通用组件在 src/components/meta 还是 handle,默认沿用仓库当前已存在的唯一口径,不新增第三种字段useEffect样式还原检查:涉及 UI 还原的样式开发,请参考 .agents/skills/create-proposal/SKILL.md 中的「样式还原验证检查清单」及对应页面的 docs/样式还原/<名称>-UI分析清单.md。