Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
giuseppe-trisciuoglio avatar

React Code Review

  • 1.7k installs
  • 318 repo stars
  • Updated June 22, 2026
  • giuseppe-trisciuoglio/developer-kit

react-code-review is an agent skill for structured React code review covering hooks, React 19, accessibility, and TypeScript.

About

The react-code-review skill provides structured comprehensive code review for React applications evaluating component architecture, hook usage, React 19 patterns including use and useOptimistic, state management with TanStack Query over manual useEffect fetches, performance memoization and code splitting, WCAG accessibility, and TypeScript prop typing. It produces severity-classified findings as Critical, Warning, and Suggestion with code examples and delegates deep architectural analysis to react-software-architect-review. Review steps identify scope with glob and grep, analyze single-responsibility components under 200 lines, validate useEffect dependency arrays and cleanup, check semantic HTML and ARIA, and assess bundle imports. Use when reviewing React PRs, new features, or component refactors. Agents should follow the SKILL.md workflow end to end, grounding classification in documented commands, file paths, prerequisites, and troubleshooting notes rather than improvising steps. Review React code for architecture, hooks, React 19 patterns, accessibility, and TypeScript quality. Invoke when User asks review React code, React code review, or check React components. Best for Dev.

  • Structured review: architecture, hooks, React 19, state, performance, a11y.
  • Severity findings: Critical, Warning, Suggestion with code examples.
  • Flags components over 200 lines or more than 7 props.
  • Prefers TanStack Query over useEffect plus useState for server state.
  • Delegates deep architecture to react-software-architect-review agent.

React Code Review by the numbers

  • 1,679 all-time installs (skills.sh)
  • +151 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #82 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

react-code-review capabilities & compatibility

Capabilities
component architecture analysis · hook dependency and cleanup review · accessibility wcag checks · severity classified report generation
Use cases
code review · frontend · testing
npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill react-code-review

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.7k
repo stars318
Security audit3 / 3 scanners passed
Last updatedJune 22, 2026
Repositorygiuseppe-trisciuoglio/developer-kit

How do I review React components and hooks for production readiness before merging?

Review React code for architecture, hooks, React 19 patterns, accessibility, and TypeScript quality.

Who is it for?

Developers reviewing React PRs, new features, or component refactors for best practices.

Skip if: Skip for non-React codebases or backend-only API reviews without React components.

When should I use this skill?

User asks review React code, React code review, or check React components.

What you get

A severity-classified review report with Critical Warning Suggestion findings and fix examples.

  • Accessibility review notes
  • Semantic HTML and ARIA violation list

By the numbers

  • Checklist covers 9 semantic HTML element mappings including button, nav, main, and table

Files

SKILL.mdMarkdownGitHub ↗

React Code Review

Overview

This skill provides structured, comprehensive code review for React applications. It evaluates code against React 19 best practices, component architecture patterns, hook usage, accessibility standards, and production-readiness criteria. The review produces actionable findings categorized by severity (Critical, Warning, Suggestion) with concrete code examples for improvements.

This skill delegates to the react-software-architect-review agent for deep architectural analysis when invoked through the agent system.

When to Use

  • Reviewing React components, hooks, and pages before merging
  • Validating component composition and reusability patterns
  • Checking proper hook usage (useState, useEffect, useMemo, useCallback)
  • Reviewing React 19 patterns (use, useOptimistic, useFormStatus, Actions)
  • Evaluating state management approaches (local, context, external stores)
  • Assessing performance optimization (memoization, code splitting, lazy loading)
  • Reviewing accessibility compliance (WCAG, semantic HTML, ARIA)
  • Validating TypeScript typing for props, state, and events
  • Checking Tailwind CSS and styling patterns
  • After implementing new React features or refactoring component architecture

Instructions

1. Identify Scope: Determine which React components and hooks are under review. Use glob to discover .tsx/.jsx files and grep to identify component definitions, hook usage, and context providers.

2. Analyze Component Architecture: Verify proper component composition — check for single responsibility, appropriate size, and reusability. Look for components that are too large (>200 lines), have too many props (>7), or mix concerns.

3. Review Hook Usage: Validate proper hook usage — check dependency arrays in useEffect/useMemo/useCallback, verify cleanup functions in useEffect, and identify unnecessary re-renders caused by missing or incorrect memoization.

4. Evaluate State Management: Assess where state lives — check for proper colocation, unnecessary lifting, and appropriate use of Context vs external stores. Verify that server state uses TanStack Query, SWR, or similar libraries rather than manual useEffect + useState patterns.

5. Check Accessibility: Review semantic HTML usage, ARIA attributes, keyboard navigation, focus management, and screen reader compatibility. Verify that interactive elements are accessible and form inputs have proper labels.

6. Assess Performance: Look for unnecessary re-renders, missing React.memo on expensive components, improper use of useCallback/useMemo, missing code splitting, and large bundle imports.

7. Review TypeScript Integration: Check prop type definitions, event handler typing, generic component patterns, and proper use of utility types. Verify that any is not used where specific types are possible.

8. Produce Review Report: Generate a structured report with severity-classified findings (Critical, Warning, Suggestion), positive observations, and prioritized recommendations with code examples.

Examples

Example 1: Hook Dependency Issues

// ❌ Bad: Missing dependency causes stale closure
function UserProfile({ userId }: { userId: string }) {
  const [user, setUser] = useState<User | null>(null);

  useEffect(() => {
    fetchUser(userId).then(setUser);
  }, []); // Missing userId in dependency array

  return <div>{user?.name}</div>;
}

// ✅ Good: Proper dependencies with cleanup
function UserProfile({ userId }: { userId: string }) {
  const [user, setUser] = useState<User | null>(null);

  useEffect(() => {
    let cancelled = false;
    fetchUser(userId).then((data) => {
      if (!cancelled) setUser(data);
    });
    return () => { cancelled = true; };
  }, [userId]);

  return <div>{user?.name}</div>;
}

// ✅ Better: Use TanStack Query for server state
function UserProfile({ userId }: { userId: string }) {
  const { data: user, isLoading } = useQuery({
    queryKey: ['user', userId],
    queryFn: () => fetchUser(userId),
  });

  if (isLoading) return <Skeleton />;
  return <div>{user?.name}</div>;
}

Example 2: Component Composition

// ❌ Bad: Monolithic component mixing data fetching, filtering, and rendering
function Dashboard() {
  const [users, setUsers] = useState([]);
  const [filter, setFilter] = useState('');
  useEffect(() => { /* fetch + filter + sort all in one */ }, [filter]);
  return <div>{/* 200+ lines of mixed concerns */}</div>;
}

// ✅ Good: Composed from focused components with custom hooks
function Dashboard() {
  return (
    <div>
      <UserFilters />
      <Suspense fallback={<TableSkeleton />}>
        <UserTable />
      </Suspense>
      <UserPagination />
    </div>
  );
}

Example 3: Accessibility Review

// ❌ Bad: Inaccessible interactive elements
function Menu({ items }: { items: MenuItem[] }) {
  const [open, setOpen] = useState(false);
  return (
    <div>
      <div onClick={() => setOpen(!open)}>Menu</div>
      {open && (
        <div>
          {items.map(item => (
            <div key={item.id} onClick={() => navigate(item.path)}>
              {item.label}
            </div>
          ))}
        </div>
      )}
    </div>
  );
}

// ✅ Good: Accessible with proper semantics and keyboard support
function Menu({ items }: { items: MenuItem[] }) {
  const [open, setOpen] = useState(false);
  return (
    <nav aria-label="Main navigation">
      <button
        onClick={() => setOpen(!open)}
        aria-expanded={open}
        aria-controls="menu-list"
      >
        Menu
      </button>
      {open && (
        <ul id="menu-list" role="menu">
          {items.map(item => (
            <li key={item.id} role="menuitem">
              <a href={item.path}>{item.label}</a>
            </li>
          ))}
        </ul>
      )}
    </nav>
  );
}

Example 4: Performance Optimization

// ❌ Bad: Unstable callback recreated every render causes child re-renders
{filtered.map(product => (
  <ProductCard
    key={product.id}
    product={product}
    onSelect={() => console.log(product.id)} // New function each render
  />
))}

// ✅ Good: Stable callback + memoized child
const handleSelect = useCallback((id: string) => {
  console.log(id);
}, []);

const filtered = useMemo(
  () => products.filter(p => p.name.toLowerCase().includes(search.toLowerCase())),
  [products, search]
);

{filtered.map(product => (
  <ProductCard key={product.id} product={product} onSelect={handleSelect} />
))}

const ProductCard = memo(function ProductCard({ product, onSelect }: Props) {
  return <div onClick={() => onSelect(product.id)}>{product.name}</div>;
});

Example 5: TypeScript Props Review

// ❌ Bad: Loose typing and missing prop definitions
function Card({ data, onClick, children, ...rest }: any) {
  return (
    <div onClick={onClick} {...rest}>
      <h2>{data.title}</h2>
      {children}
    </div>
  );
}

// ✅ Good: Strict typing with proper interfaces
interface CardProps extends React.ComponentPropsWithoutRef<'article'> {
  title: string;
  description?: string;
  variant?: 'default' | 'outlined' | 'elevated';
  onAction?: (event: React.MouseEvent<HTMLButtonElement>) => void;
  children: React.ReactNode;
}

function Card({
  title,
  description,
  variant = 'default',
  onAction,
  children,
  className,
  ...rest
}: CardProps) {
  return (
    <article className={cn('card', `card--${variant}`, className)} {...rest}>
      <h2>{title}</h2>
      {description && <p>{description}</p>}
      {children}
      {onAction && <button onClick={onAction}>Action</button>}
    </article>
  );
}

Review Output Format

Structure all code review findings as follows:

1. Summary

Brief overview with an overall quality score (1-10) and key observations.

2. Critical Issues (Must Fix)

Issues causing bugs, security vulnerabilities, or broken functionality.

3. Warnings (Should Fix)

Issues that violate best practices, cause performance problems, or reduce maintainability.

4. Suggestions (Consider Improving)

Improvements for code organization, accessibility, or developer experience.

5. Positive Observations

Well-implemented patterns and good practices to acknowledge.

6. Recommendations

Prioritized next steps with code examples for the most impactful improvements.

Best Practices

  • Keep components focused — single responsibility, under 200 lines
  • Colocate state with the components that use it
  • Use custom hooks to extract reusable logic from components
  • Apply React.memo only when measured re-render cost justifies it
  • Use TanStack Query or SWR for server state instead of useEffect + useState
  • Always include cleanup functions in useEffect when subscribing to external resources
  • Write semantic HTML first, add ARIA only when native semantics are insufficient
  • Use TypeScript strict mode and avoid any in component props
  • Implement error boundaries for graceful failure handling
  • Prefer composition over conditional rendering complexity

Constraints and Warnings

  • Respect the project's React version — avoid suggesting React 19 features for older versions
  • Do not enforce a specific state management library unless the project has standardized on one
  • Memoization is not always beneficial — only suggest it when re-render impact is measurable
  • Accessibility recommendations should follow WCAG 2.1 AA as the baseline
  • Focus on high-confidence issues — avoid false positives on subjective style choices
  • Do not suggest rewriting working components without clear, measurable benefit

References

See the references/ directory for detailed review checklists and pattern documentation:

  • references/hooks-patterns.md — React hooks best practices and common mistakes
  • references/component-architecture.md — Component composition and design patterns
  • references/accessibility.md — Accessibility checklist and ARIA patterns for React

Related skills

Forks & variants (1)

React Code Review has 1 known copy in the catalog totaling 2 installs. They canonicalize to this original listing.

How it compares

Use react-code-review for human-guided React a11y PR review; use browser automation tools for runtime axe or Lighthouse audits.

FAQ

What does the review cover?

Component architecture, hook usage, React 19 patterns, state management, performance, accessibility, and TypeScript typing.

How are findings classified?

Critical, Warning, and Suggestion severity with concrete code examples for improvements.

Is react-code-review safe to install?

Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.