Skip to content
Development
Skill

/react-patterns

React + TypeScript component and hook standards. TRIGGER when: creating components, custom hooks, or reviewing React code. SKIP: visual styling and theme tokens (use mui-styling); global store design (use state-management).

From plugin
scaffolding
1639 skills13 agents21 commands25 hooks

Claude Code

$ npx -y skills add komluk/scaffolding --skill react-patterns --agent claude-code

SKILL.md

react-patterns.SKILL.md
name: react-patterns
description: "React + TypeScript component and hook standards. TRIGGER when: creating components, custom hooks, or reviewing React code. SKIP: visual styling and theme tokens (use mui-styling); global store design (use state-management)."

React Patterns Skill

React + TypeScript standards and best practices.

When to Apply

  • Creating new React components
  • Implementing custom hooks
  • State management decisions
  • Performance optimization
  • Code review for React code

---

Component Standards

Component Structure Rules

| Rule | Description | |------|-------------| | Functional only | Use function components, no class components | | TypeScript props | Define Props interface for all components | | Single responsibility | One component = one purpose | | Max 200 lines | Split larger components into sub-components |

Component Organization

| Section | Order | |---------|-------| | 1. Imports | Types first, then libraries, then local | | 2. Props interface | Define before component | | 3. Hooks | All hooks at top of function | | 4. Handlers | Event handlers after hooks | | 5. Effects | useEffect after handlers | | 6. Return | JSX at the end |

---

Hook Standards

Built-in Hooks Usage

| Hook | Use When | Avoid When | |------|----------|------------| | `useState` | Local component state | Shared state (use Zustand) | | `useEffect` | Side effects, subscriptions | Derived state (use `useMemo`) | | `useMemo` | Expensive calculations | Simple values | | `useCallback` | Callbacks passed to children | Inline handlers | | `useRef` | DOM refs, mutable values | State that triggers renders |

Custom Hook Guidelines

| Guideline | Description | |-----------|-------------| | Prefix with `use` | `useFeatureName`, `useDataFetching` | | Return object | `{ data, loading, error }` | | Single responsibility | One hook = one purpose | | Reusable | Extract when logic repeats 2+ times |

---

TypeScript Requirements

Type Import Rules

| Rule | Example | |------|---------| | Use `import type` | `import type { Props } from './types'` | | Use `export type` | `export type { ButtonProps }` | | Centralize types | All types in `types/index.ts` | | No `any` | Use `unknown` or proper types |

Props Typing Standards

| Standard | Description | |----------|-------------| | Interface for props | `interface Props { ... }` | | Optional with `?` | `title?: string` | | Children explicit | `children: React.ReactNode` | | Events typed | `onClick: (e: React.MouseEvent) => void` |

---

Performance Standards

Memoization Guidelines

| Technique | When to Use | |-----------|-------------| | `useMemo` | Expensive calculations, derived data | | `useCallback` | Functions passed as props to memoized children | | `React.memo` | Components with same props render same output |

Re-render Prevention

| Cause | Solution | |-------|----------| | New object in props | Memoize with `useMemo` | | New function in props | Memoize with `useCallback` | | Context changes | Split contexts by update frequency | | Parent re-renders | Use `React.memo` on child |

---

Effect Guidelines

useEffect Rules

| Rule | Description | |------|-------------| | Cleanup required | Return cleanup function for subscriptions | | Dependency array | Include all referenced values | | Avoid objects in deps | Use primitive values or `useMemo` | | No async directly | Define async function inside effect |

Common Effect Patterns

| Pattern | Use Case | |---------|----------| | Data fetching | Fetch on mount or dependency change | | Subscription | Event listeners, WebSocket | | DOM measurement | Read layout after render | | Sync external | Sync state with external system |

---

Event Handling Standards

Event Handler Naming

| Pattern | Example | |---------|---------| | Action verb | `handleClick`, `handleSubmit` | | Specific action | `handleDeleteItem`, `handleToggleMenu` | | Props callback | `onAction`, `onChange` |

Event Types

| Event | Type | |-------|------| | Click | `React.MouseEvent<HTMLButtonElement>` | | Change | `React.ChangeEvent<HTMLInputElement>` | | Submit | `React.FormEvent<HTMLFormElement>` | | Keyboard | `React.KeyboardEvent` |

---

File Organization

Directory Structure

src/
├── components/
│   ├── common/          # Shared/reusable components
│   ├── [feature]/       # Feature-specific components
│   └── layout/          # Layout components
├── hooks/
│   └── use[Name].ts     # Custom hooks
├── pages/
│   └── [Page].tsx       # Route pages
├── services/
│   └── [name]Service.ts # API services
├── stores/
│   └── [name]Store.ts   # Zustand stores
└── types/
    └── index.ts         # All type definitions

---

Anti-Patterns to Avoid

| Anti-Pattern | Problem | Solution | |--------------|---------|----------| | useEffect for derived state | Extra renders | Use `useMemo` | | Missing dependencies | Stale closures, bugs | Add all deps | | Index as key | Bugs on reorder | Use unique id | | Prop drilling > 2 levels | Hard to maintain | Use Context/Zustand | | Inline object props | New reference each render | Memoize or extract | | State for constants | Unnecessary complexity | Define outside component |

---

Code Review Checklist

Component Review

  • [ ] Single responsibility principle followed
  • [ ] Props interface defined with TypeScript
  • [ ] No prop drilling beyond 2 levels
  • [ ] Hooks at top level only
  • [ ] Cleanup in useEffect where needed

Performance Review

  • [ ] Expensive calculations memoized
  • [ ] Callbacks memoized when passed to children
  • [ ] No new objects/arrays created in render
  • [ ] Keys are unique and stable

TypeScript Review

  • [ ] `import type` used for type imports
  • [ ] No `any` types
  • [ ] Props properly typed
  • [ ] Event handlers typed
Read more
@komluk
Ships withscaffolding

Spec-driven multi-agent orchestration for Claude Code — pure markdown, zero backend, runs on the stock runtime. 13 agents, 39 skills, 21 commands, 20 hooks, per-phase model tiers, opt-in lifecycle hooks, optional cross-device semantic memory.

1639 skills13 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
16
Star history of komluk/scaffolding on GitHub, a chart by star-history.com

Other skills on scaffolding.

agent-comms

agent-comms

SendMessage recipient validation and worktreePath safety (CWE-59). TRIGGER when: validating a SendMessage `to:` recipient against…

@komluk@komlukInstall Skill
agent-memory

agent-memory

Repo-local file memory under .scaffolding/ (shared/agent/conversation tiers). TRIGGER when: reading or writing .scaffolding/…

@komluk@komlukInstall Skill
api-design

api-design

RESTful API design standards: resource naming, HTTP methods, status codes, pagination, versioning. TRIGGER when: designing new…

@komluk@komlukInstall Skill
context-engineering

context-engineering

Optimize Claude Code context-window usage for accuracy and cost. TRIGGER when: hitting context limits, structuring prompts for an…

@komluk@komlukInstall Skill
database-optimization

database-optimization

Schema design, index strategy, migration safety, and query analysis. TRIGGER when: designing tables or indexes, writing a…

@komluk@komlukInstall Skill
distill

distill

Knowledge distillation: candidate extraction, confidence scoring, tier routing. Invoked by /learn and the memory-ingest Stop…

@komluk@komlukInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about react-patterns.

Which coding agents can use react-patterns?
react-patterns installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.