SuperAPI AI 工具集

generic-react-code-reviewer

编程与开发

查看项目

更新于 10-16 10:39

技能介绍

用途

React Code Reviewer 用于按照生产质量标准审查 React/TypeScript 代码。它适用于完成功能后、提交代码前或审查拉取请求时,检查代码中的缺陷、安全漏洞、性能问题、无障碍缺口,以及是否符合 CLAUDE.md 工作流。该技能扩展自通用代码审查技能(Generic Code Reviewer),后者提供完整的代码审查方法、P0/P1/P2 优先级体系和判断标准。

主要能力

提交前验证

通过阅读 diff 进行验证,而不是运行测试、lint 或构建阶梯;检查重点是以下列出的各项内容。

React 专属检查

TypeScript 严格模式

要求 tsconfig.json 中启用以下设置:

{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true
  }
}

检查要点包括:用户输入或 API 响应不得使用 any 类型;外部数据先用 unknown 验证,再用类型守卫;可复用工具中使用泛型而非 any。

组件模式

模式 检查项
Props 已定义接口,无 any
State 使用 Zustand/useState 并带类型
Events 事件处理器带类型
Refs useRef<ElementType>(null)

Hook 依赖数组

P1 问题示例:缺少依赖。

// P1 Issue: Missing dependencies
useEffect(() => {
  fetchData(userId); // userId missing from deps
}, []); // ❌

// Correct
useEffect(() => {
  fetchData(userId);
}, [userId]); // ✓

规则:启用 react-hooks/exhaustive-deps ESLint 规则。

状态管理(Zustand/Redux)

检查 store 切片是否正确带类型;action 返回 void(直接更新状态);派生状态的 selector 是否记忆化;大于 1MB 的大数据应放在 IndexedDB,而非 localStorage。

React Query/SWR 模式

// Proper typing
const { data } = useQuery<User>({
  queryKey: ["user", id],
  queryFn: () => fetchUser(id),
});

// Check: staleTime, cacheTime configured
// Check: error boundaries for query failures

性能(P1)

包体积目标

目标 阈值
初始包 < 100KB gzipped
懒加载分块 每块 < 50KB
JS 总量 < 300KB

懒加载

大于 20KB 的重型组件必须懒加载:

const HeavyChart = lazy(() => import('./HeavyChart'));
const RichTextEditor = lazy(() => import('./RichTextEditor'));

<Suspense fallback={<Skeleton />}>
  <HeavyChart />
</Suspense>

记忆化

// Expensive calculations
const sortedItems = useMemo(() =>
  items.sort((a, b) => a.date - b.date),
  [items]
);

// Callback stability for child components
const handleClick = useCallback(() => {
  doSomething(id);
}, [id]);

// Component memoization (when props are stable)
export const Item = memo(function Item({ data }: Props) {
  return <div>{data.name}</div>;
});

动画(仅 GPU 加速)

/* ✓ DO animate */
transform: translateY(-4px);
opacity: 0.5;

/* ❌ NEVER animate */
width, height, margin, padding, top, left

无障碍(P1)

焦点管理

// Modal focus trapping
useEffect(() => {
  if (isOpen) {
    const firstFocusable = modalRef.current?.querySelector("button, input");
    firstFocusable?.focus();
  }
}, [isOpen]);

// Escape to close
useEffect(() => {
  const handleEscape = (e: KeyboardEvent) => {
    if (e.key === "Escape") onClose();
  };
  window.addEventListener("keydown", handleEscape);
  return () => window.removeEventListener("keydown", handleEscape);
}, [onClose]);

JSX 中的 ARIA

// Icon-only buttons require labels
<button aria-label="Close modal">
  <X className="w-5 h-5" />
</button>

// Dialogs
<div role="dialog" aria-modal="true" aria-labelledby="title">
  <h2 id="title">Confirm Action</h2>
</div>

使用方式

该技能通过阅读代码 diff 进行审查,不依赖运行测试、lint 或构建。使用时将其应用于待审查的 React/TypeScript 代码变更,按照上述检查项逐项核对。

快速审查清单

React 专属(添加到基础清单):

  • [ ] Hook 依赖正确
  • [ ] 重型组件已懒加载
  • [ ] 状态管理带类型
  • [ ] 在有益处使用记忆化
  • [ ] 模态框中的焦点管理

适用场景

  • 完成功能后
  • 提交代码前
  • 审查拉取请求时

限制

该技能扩展自通用代码审查技能,完整方法、P0/P1/P2 优先级体系和判断标准需参考基础技能。完整的安全、性能、无障碍标准参考 Code Review Standards,UI 一致性参考 Design Patterns。关于收费、价格、平台等信息暂未提供。