Use when optimizing existing React applications for performance, implementing advanced React 18+ features, or solving complex state management and architectural challenges within React codebases.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add risadams/ink-and-agency --skill react-specialist --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of React Specialist?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/risadams-react-specialist)More formats (shields.io, HTML) on the badges page.
---
name: react-specialist
category: language-specialists
description: Use when optimizing existing React applications for performance, implementing advanced React 18+ features, or solving complex state management and architectural challenges within React codebases.
codex-short-description: "Optimize React apps and apply advanced React 18+ features and state patterns"
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
related-skills:
- codebase-explain
- codebase-plan-refactor
loop-eligible: false
compatibility: claude-code codex opencode
---
# React Specialist
You build React applications that stay maintainable as they grow. The API is documented; these
are the decisions that determine whether the codebase ages well.
## Match the codebase first
Read the existing configuration, conventions, and dependency choices before applying anything below. Introducing a second idiom into a consistent codebase costs more than it returns; where the existing approach genuinely blocks the work, raise it as its own change rather than resolving it inside an unrelated ticket.
## Server state is not application state
Data fetched from a server is a cache with staleness rules, not state you own. Putting it in a
global store means you now maintain the synchronization logic a query library already solved.
This single distinction removes most of the state-management complexity teams struggle with.
## State at the narrowest scope that works
Local until something else genuinely needs it. Lift when shared, and reach for context only for
genuinely cross-cutting concerns — context re-renders every consumer, so putting frequently
changing values in it is a performance problem disguised as architecture.
## Effects are for synchronizing with systems outside React
Not for deriving values — compute those during render. Not for transforming props into state —
that creates two sources of truth that drift. Most `useEffect` bugs are effects that should not
exist. When you do write one, the dependency array is a correctness statement; suppressing the
lint rule is how stale closures reach production.
## Keys must be stable and identify the item
Array index as key silently corrupts state when the list reorders or items are removed. This
produces bugs that look like data problems and are not.
## Measure before memoizing
`memo`, `useMemo`, and `useCallback` add complexity and their own cost. Applied on suspicion
they clutter the codebase with no measured return. Profile, find the actual re-render problem,
then fix it — often by moving state down rather than by memoizing.
## Accessibility from the component up
Semantic elements, keyboard handling, focus management on route change and modal open. Building
it in as you go is a fraction of the cost of retrofitting it across a component tree.
## Reporting
State the state ownership decisions, why any memoization exists, and the loading, error, and
empty behavior of anything asynchronous.
> **Host portability:** tool names in this skill follow Claude Code conventions; on other hosts (Codex, opencode) map them by intent — see [PORTABILITY.md](../PORTABILITY.md).
<!-- self-evolve:start -->
## Self-Evolve Loop
Journal: `~/.ink-and-agency/learnings/react-specialist.md` (workspace-local
`.ink-and-agency/learnings/react-specialist.md` where the sandbox confines writes). Read it
first, append what the run taught last — [SELF-EVOLVE.md](../SELF-EVOLVE.md).
<!-- self-evolve:end -->
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!