‹ 首页

react-expert

@jeffallan · 收录于 1 周前 · 上游提交 1 个月前

Use when building React 18+ applications in .jsx or .tsx files, Next.js App Router projects, or create-react-app setups. Creates components, implements custom hooks, debugs rendering issues, migrates class components to functional, and implements state management. Invoke for Server Components, Suspense boundaries, useActionState forms, performance optimization, or React 19 features.

适合你,如果正在用 React 18+ 或 Next.js 构建前端应用

/ 下载安装
react-expert.skill双击,或拖进 Claude 桌面版 / Cowork,即完成安装↓ .skill↓ .zip
用别的 agent?下载 .zip 解压,把文件夹放进它的技能目录
Claude Code~/.claude/skills/(项目级 .claude/skills/)
Codex CLI~/.codex/skills/
Cursor自动读取上面两处目录
其他工具见其文档的「skills」目录;两个下载是同一份文件,只是名字不同
/ 通过 npx 安装 校验哈希
npx oh-my-skill add jeffallan/claude-skills/react-expert
/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- jeffallan/claude-skills/react-expert
/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify jeffallan/claude-skills/react-expert
安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
10501GitHub stars
~1K最小装载
~9.9K含声明引用
~9.9K文本包总量
镜像托管

怎么用

商店整理自技能原文 · 版本 e8be415 · 表述以原文为准
它做什么

Claude 会帮你编写 React 组件、自定义 Hook、处理状态管理、优化性能,并迁移旧代码到新写法。

什么时候触发

当你提到 React、JSX、hooks、Server Components 等关键词,或要求创建组件、实现表单、调试渲染问题时触发。

装好后可以这样说
Claude 会分析并应用 memo、lazy 等优化。
技能原文 SKILL.md作者撰写 · MIT · e8be415

React Expert

Senior React specialist with deep expertise in React 19, Server Components, and production-grade application architecture.

When to Use This Skill
  • Building new React components or features
  • Implementing state management (local, Context, Redux, Zustand)
  • Optimizing React performance
  • Setting up React project architecture
  • Working with React 19 Server Components
  • Implementing forms with React 19 actions
  • Data fetching patterns with TanStack Query or use()
Core Workflow
  1. Analyze requirements - Identify component hierarchy, state needs, data flow
  2. Choose patterns - Select appropriate state management, data fetching approach
  3. Implement - Write TypeScript components with proper types
  4. Validate - Run tsc --noEmit; if it fails, review reported errors, fix all type issues, and re-run until clean before proceeding
  5. Optimize - Apply memoization where needed, ensure accessibility; if new type errors are introduced, return to step 4
  6. Test - Write tests with React Testing Library; if any assertions fail, debug and fix before submitting
Reference Guide

Load detailed guidance based on context:

| Topic | Reference | Load When | |-------|-----------|-----------| | Server Components | references/server-components.md | RSC patterns, Next.js App Router | | React 19 | references/react-19-features.md | use() hook, useActionState, forms | | State Management | references/state-management.md | Context, Zustand, Redux, TanStack | | Hooks | references/hooks-patterns.md | Custom hooks, useEffect, useCallback | | Performance | references/performance.md | memo, lazy, virtualization | | Testing | references/testing-react.md | Testing Library, mocking | | Class Migration | references/migration-class-to-modern.md | Converting class components to hooks/RSC |

Key Patterns
Server Component (Next.js App Router)
// app/users/page.tsx — Server Component, no "use client"
import { db } from '@/lib/db';

interface User {
  id: string;
  name: string;
}

export default async function UsersPage() {
  const users: User[] = await db.user.findMany();

  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}
React 19 Form with useActionState
'use client';
import { useActionState } from 'react';

async function submitForm(_prev: string, formData: FormData): Promise<string> {
  const name = formData.get('name') as string;
  // perform server action or fetch
  return `Hello, ${name}!`;
}

export function GreetForm() {
  const [message, action, isPending] = useActionState(submitForm, '');

  return (
    <form action={action}>
      <input name="name" required />
      <button type="submit" disabled={isPending}>
        {isPending ? 'Submitting…' : 'Submit'}
      </button>
      {message && <p>{message}</p>}
    </form>
  );
}
Custom Hook with Cleanup
import { useState, useEffect } from 'react';

function useWindowWidth(): number {
  const [width, setWidth] = useState(() => window.innerWidth);

  useEffect(() => {
    const handler = () => setWidth(window.innerWidth);
    window.addEventListener('resize', handler);
    return () => window.removeEventListener('resize', handler); // cleanup
  }, []);

  return width;
}
Constraints
MUST DO
  • Use TypeScript with strict mode
  • Implement error boundaries for graceful failures
  • Use key props correctly (stable, unique identifiers)
  • Clean up effects (return cleanup function)
  • Use semantic HTML and ARIA for accessibility
  • Memoize when passing callbacks/objects to memoized children
  • Use Suspense boundaries for async operations
MUST NOT DO
  • Mutate state directly
  • Use array index as key for dynamic lists
  • Create functions inside JSX (causes re-renders)
  • Forget useEffect cleanup (memory leaks)
  • Ignore React strict mode warnings
  • Skip error boundaries in production
Output Templates

When implementing React features, provide:

  1. Component file with TypeScript types
  2. Test file if non-trivial logic
  3. Brief explanation of key decisions
Knowledge Reference

React 19, Server Components, use() hook, Suspense, TypeScript, TanStack Query, Zustand, Redux Toolkit, React Router, React Testing Library, Vitest/Jest, Next.js App Router, accessibility (WCAG)

Documentation

按 MIT 许可原样转载,未经改动 · 在 GitHub 查看 →

评论

登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。