Build modern React component architecture with composition patterns. Use when designing reusable React components, applying composition patterns, or structuring component hierarchies.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add gabrielmoreira/agent-skills-mirror --skill react-component-patterns --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of React Component Patterns?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-react-component-patterns)More formats (shields.io, HTML) on the badges page.
---
name: react-component-patterns
description: Build modern React component architecture with composition patterns. Use when designing reusable React components, applying composition patterns, or structuring component hierarchies.
metadata:
triggers:
files:
- '**/*.jsx'
- '**/*.tsx'
keywords:
- component
- props
- children
- composition
- hoc
- render-props
---
# React Component Patterns
## **Priority: P0 (CRITICAL)**
## Implementation Guidelines
- **Architecture (default)**: Composition first — `children`/named slot props for layout, **Compound Components** (e.g., `<Select><Select.Option /></Select>`) via Context for implicit shared state within one UI unit. Reach for **Higher-Order Components** or classic **Render Props** (`render={(data) => ...}`) only when composition can't express it (e.g. wrapping a third-party class component) — hooks cover most cross-cutting concerns HOCs used to.
- **React 19**: `ref` is a regular prop on function components — no `forwardRef` needed for new code. Use `use(promise)` / `use(context)` to read a promise or context conditionally in render instead of `useContext` + extra `useEffect` plumbing.
- **Components**: Distinguish between **Controlled** (state from props) and **Uncontrolled** (local `useRef` state) components. Favor controlled for form validation.
- **Props**: Use **Explicit TS interfaces**. Avoid **Prop Drilling** by leveraging **Context API** or **Zustand** for global/deeply nested state.
- **Boolean Props**: Shorthand `<Cmp isVisible />` vs `isVisible={true}`.
- **Conditionals**: Ternary (`Cond ? <A/> : <B/>`) over `&&` for rendering consistency (prevents `0` rendering).
- **Function Components**: Only hooks. No classes. Small size (<250 lines). One component per file.
- **Exports**: Named exports only. **PascalCase** naming.
```tsx
function ThemedInput({ ref, ...props }: { ref?: React.Ref<HTMLInputElement> } & InputProps) {
return <input ref={ref} className={useTheme().input} {...props} />;
}
```
## Verify
- [ ] Shared implicit state uses Compound Components + Context, not prop drilling.
- [ ] `ref` passed as a plain prop (no `forwardRef`) on components targeting React 19.
- [ ] HOC/classic render-props only where composition genuinely can't express the wrap.
## Anti-Patterns
- **No Classes**: Use hooks.
- **No Prop Drilling**: Use Context/Zustand.
- **No Nested Definitions**: Define components at top level.
- **No Index Keys**: Use stable IDs.
- **No forwardRef on new React 19 code**: Accept `ref` as a normal prop instead.
## References
See [references/patterns.md](references/patterns.md) for Composition, Compound Components, and Render Props examples.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!