关于 fix-bug
Fix React Router Bug 是用于处理 React Router 仓库问题的技能,规定了从调查和复现问题,到先写测试再修复、验证、创建变更文件及提交 PR 的流程。
主要功能
- 01获取并分析 GitHub 问题
- 02验证复现并定位相关代码
- 03修复前添加失败测试
- 04运行测试、lint 和类型检查
- 05准备变更文件与 PR
适用场景
- 01调查已报告的路由器错误
- 02根据问题示例复现错误
- 03验证修复对不同路由模式的影响
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ remix-run/ react-router --skill fix-bug安装后在 Claude Code 中输入/fix-bug确认已加载。
详细介绍
修复 React Router Bug
修复以下 GitHub issue 中报告的 bug:$ARGUMENTS
分支
Bug 修复应从干净的工作区开始。如果有更改,请提示我在继续之前解决它们。
Bug 应从 main 分支修复,在新分支上进行,分支名格式为 {author}/{semantic-branch-name}(例如 brophdawg11/fix-navigation):
git branch {author}/{semantic-branch-name} main
git checkout {author}/{semantic-branch-name}
工作流
1. 获取并理解 Issue
使用 gh issue view <number> --repo remix-run/react-router 或 WebFetch 阅读完整的 issue。
提取:
- Bug 描述以及预期行为与实际行为
- React Router 版本和模式(Declarative / Data / Framework / RSC)
- Issue 中的任何代码片段
- 复现链接(StackBlitz、CodeSandbox、GitHub 仓库等)
2. 验证复现
如果有 StackBlitz/CodeSandbox/在线沙箱链接:
- 使用
WebFetch读取沙箱 URL 并提取相关代码 - 确定触发该 bug 的确切事件序列
如果有 GitHub 仓库链接:
- 使用
WebFetch从 raw GitHub URL 读取关键文件(package.json、相关源文件) - 确定涉及的路由配置、loader、action 或组件
如果没有复现链接:
- 使用
gh issue view <number> --repo remix-run/react-router --comments搜索 issue 评论 - 在评论中查找代码片段
- 询问用户:“未提供复现。你能分享一个最小复现或粘贴相关代码吗?”
3. 定位受影响的代码
根据该 bug,找到相关源文件。查阅关键文件映射表:
| 区域 | 文件 |
|---|---|
| 核心 router 逻辑 | packages/react-router/lib/router/router.ts |
| React 组件/hooks | packages/react-router/lib/components.tsx, lib/hooks.tsx |
| DOM 工具 | packages/react-router/lib/dom/ |
| Vite/Framework 插件 | packages/react-router-dev/vite/plugin.ts |
| RSC | packages/react-router/lib/rsc/ |
使用 Grep 和 Glob 追踪相关代码路径。
4. 编写失败的测试
单元测试(用于 router 逻辑、hooks、纯组件行为 — 无需构建):
- 位置:
packages/react-router/__tests__/ - 使用 Jest;运行方式:
pnpm test packages/react-router/__tests__/<file> - 匹配附近测试文件的风格(describe/it 块、
createStaticHandler、createMemoryRouter、render、screen等)
集成测试(用于 Vite 插件、SSR、hydration、Framework 模式):
- 位置:
integration/ - 使用 Playwright,配合
createFixture()→createAppFixture()→PlaywrightFixture - 运行方式:
pnpm test:integration:run --project chromium integration/<file> - 如有需要,先构建:
pnpm test:integration --project chromium
编写测试以精确复现该 bug — 它必须在修复前失败。
运行它并确认失败:
pnpm test packages/react-router/__tests__/<file> # unit
# or
pnpm test:integration:run --project chromium integration/<file> # integration
5. 实现修复
- 进行修复该 bug 所需的最小更改
- 不要重构无关代码
- 确认修复解决了根本原因,而不仅仅是症状
- 考虑所有五种模式:此修复是否会破坏 Declarative / Data / Framework / RSC 中的任何内容?
再次运行失败的测试 — 它现在必须通过:
pnpm test packages/react-router/__tests__/<file>
运行更广泛的测试套件以检查回归:
pnpm test packages/react-router/
如果修复涉及 Framework/Vite 代码,也运行集成测试:
pnpm test:integration:run --project chromium
确认 lint 和类型检查通过:
pnpm lint
pnpm typecheck
6. 创建变更文件
在 packages/<package>/.changes/<type>.<unique-meaningful-name>.md 创建变更文件。<type> 应为 patch、minor、major 或 unstable 之一,以表明所做的 API 变更类型。
格式:
fix: <brief description of what was fixed>
7. 报告结果
总结:
- 这个 bug 是什么,以及它为什么会发生
- 更改了哪些代码,以及为什么
- 测试现在已通过
- 注意到的任何边界情况或相关问题
请我审查这些更改,并根据任何反馈进行迭代。
8. 提交 PR
一旦我批准修复,就提交更改并向 main 发起一个 PR。在描述中包含 Closes #NNNN,以将该 PR 链接到原始 issue。同时,在 Development 侧边栏中链接该 issue