Skip to main content
ZICQ

Skills ZICQ category:Agent Workflows typescript-react-reviewer

Typescript React Reviewer

Expert code reviewer for TypeScript + React 19 applications. Use when reviewing React code, identifying anti-patterns, evaluating state management, or assessing code maintainability. Triggers: code review requests, PR reviews, React architecture evaluation, identifying code smells, TypeScript type safety checks, useEffect abuse detection, state management review.

8999 installs

Official URL:skills.sh

What this skill does

Intro in this page language first. The official description stays in its original wording; we do not rewrite SKILL.md.

What it does

Expert code reviewer for TypeScript + React 19 applications

When to use it

reviewing React code, identifying anti-patterns, evaluating state management, or assessing code maintainability. Triggers: code review requests, PR reviews, React architecture evaluation, identifying code smells, TypeScript type safety checks, useEffect abuse detection, state man

How agents load it

Per Agent Skills progressive disclosure: name and description load at startup (~100 tokens); the full SKILL.md body loads when the skill activates; scripts/, references/, and assets/ load only as needed. This file's sections: TypeScript + React 19 Code Review Expert; Review Priority Levels; 🚫 Critical (Block Merge); ⚠️ High Priority; 📝 Architecture/Style; Quick Detection Patterns. It includes spec-recommended sections: step-by-step instructions.

File analysis

File analysis: besides SKILL.md, the body references references/react19-patterns.md, references/antipatterns.md, references/checklist.md. Those resources load on demand.

TypeScript + React 19 Code Review ExpertReview Priority Levels🚫 Critical (Block Merge)⚠️ High Priority📝 Architecture/StyleQuick Detection PatternsuseEffect Abuse (Most Common Anti-Pattern)React 19 Hook MistakesState Mutation DetectionTypeScript Red FlagsReview WorkflowReference Documents

Source category:skills.sh agent-skill

SKILL.md & Agent activation

Official spec ↗
name
typescript-react-reviewer
description
Expert code reviewer for TypeScript + React 19 applications. Use when reviewing React code, identifying anti-patterns, evaluating state management, or assessing code maintainability. Triggers: code review requests, PR reviews, React architecture evaluation, identifying code smells, TypeScript type safety checks, useEffect abuse detection, state management review.
  1. DiscoverThe client exposes names and descriptions to the agent.
  2. ActivateYour request or the task context selects the skill and loads its instructions.
  3. Load resourcesReferenced scripts, documentation and assets are used when needed.
Files referenced by the instructions · 3
  • references/react19-patterns.md
  • references/antipatterns.md
  • references/checklist.md

These paths are extracted from the text. Check the upstream package to verify the files exist.

Invocation syntax and available tools depend on your Agent client. Client integration guide ↗

Install this skill

Skills CLI ↗

Choose the target agent and installation scope, keep referenced package files, then verify the skill appears in the client's catalog.

This skill references supporting files. Retrieve the complete directory from the source; copying SKILL.md alone may leave missing dependencies.

Ask your Agent to install

Copy these instructions to a compatible agent and confirm the target directory matches your client.

Install the agent skill "typescript-react-reviewer" into my project. The full SKILL.md and official description are at https://zicq.com/en/skills/skl-ff35794c1d4cd8a9-Typescript-React-Reviewer.html
Save it as .cursor/skills/typescript-react-reviewer/SKILL.md or .claude/skills/typescript-react-reviewer/SKILL.md and keep the frontmatter name and description exactly as-is.
This skill also ships scripts/, references/, or assets/ — fetch the whole folder from https://github.com/dotneet/claude-code-marketplace instead of creating only a SKILL.md.

Full package on GitHub ↗

Install from the terminal · Skills CLI

Requires Node.js and npx. First inspect the repository's skill list to confirm the name.

npx skills add 'https://github.com/dotneet/claude-code-marketplace' --list

npx skills add 'https://github.com/dotneet/claude-code-marketplace' --skill 'typescript-react-reviewer'

The CLI lets you choose the agent interactively. The default scope is the project; use -g for user scope. Confirm package availability with the discovery command, then use npx skills list to inspect installed skills.

Readable layout
--- name: typescript-react-reviewer description: "Expert code reviewer for TypeScript + React 19 applications. Use when reviewing React code, identifying anti-patterns, evaluating state management, or assessing code maintainability. Triggers: code review requests, PR reviews, React architecture evaluation, identifying code smells, TypeScript type safety checks, useEffect abuse detection, state management review." --- # TypeScript + React 19 Code Review Expert Expert code reviewer with deep knowledge of React 19's new features, TypeScript best practices, state management patterns, and common anti-patterns. ## Review Priority Levels ### 🚫 Critical (Block Merge) These issues cause bugs, memory leaks, or architectural problems: | Issue | Why It's Critical | |-------|-------------------| | `useEffect` for derived state | Extra render cycle, sync bugs | | Missing cleanup in `useEffect` | Memory leaks | | Direct state mutation (`.push()`, `.splice()`) | Silent update failures | | Conditional hook calls | Breaks Rules of Hooks | | `key={index}` in dynamic lists | State corruption on reorder | | `any` type without justification | Type safety bypass | | `useFormStatus` in same component as `` | Always returns false (React 19 bug) | | Promise created inside render with `use()` | Infinite loop | ### ⚠️ High Priority | Issue | Impact | |-------|--------| | Incomplete dependency arrays | Stale closures, missing updates | | Props typed as `any` | Runtime errors | | Unjustified `useMemo`/`useCallback` | Unnecessary complexity | | Missing Error Boundaries | Poor error UX | | Controlled input initialized with `undefined` | React warning | ### 📝 Architecture/Style | Issue | Recommendation | |-------|----------------| | Component > 300 lines | Split into smaller components | | Prop drilling > 2-3 levels | Use composition or context | | State far from usage | Colocate state | | Custom hooks without `use` prefix | Follow naming convention | ## Quick Detection Patterns ### useEffect Abuse (Most Common Anti-Pattern) ```typescript // ❌ WRONG: Derived state in useEffect const [firstName, setFirstName] = useState(''); const [fullName, setFullName] = useState(''); useEffect(() => { setFullName(firstName + ' ' + lastName); }, [firstName, lastName]); // ✅ CORRECT: Compute during render const fullName = firstName + ' ' + lastName; ``` ```typescript // ❌ WRONG: Event logic in useEffect useEffect(() => { if (product.isInCart) showNotification('Added!'); }, [product]); // ✅ CORRECT: Logic in event handler function handleAddToCart() { addToCart(product); showNotification('Added!'); } ``` ### React 19 Hook Mistakes ```typescript // ❌ WRONG: useFormStatus in form component (always returns false) function Form() { const { pending } = useFormStatus(); return Send; } // ✅ CORRECT: useFormStatus in child component function SubmitButton() { const { pending } = useFormStatus(); return Send; } function Form() { return ; } ``` ```typescript // ❌ WRONG: Promise created in render (infinite loop) function Component() { const data = use(fetch('/api/data')); // New promise every render! } // ✅ CORRECT: Promise from props or state function Component({ dataPromise }: { dataPromise: Promise }) { const data = use(dataPromise); } ``` ### State Mutation Detection ```typescript // ❌ WRONG: Mutations (no re-render) items.push(newItem); setItems(items); arr[i] = newValue; setArr(arr); // ✅ CORRECT: Immutable updates setItems([...items, newItem]); setArr(arr.map((x, idx) => idx === i ? newValue : x)); ``` ### TypeScript Red Flags ```typescript // ❌ Red flags to catch const data: any = response; // Unsafe any const items = arr[10]; // Missing undefined check const App: React.FC = () => {}; // Discouraged pattern // ✅ Preferred patterns const data: ResponseType = response; const items = arr[10]; // with noUncheckedIndexedAccess const App = ({ prop }: Props) => {}; // Explicit props ``` ## Review Workflow 1. **Scan for critical issues first** - Check for the patterns in "Critical (Block Merge)" section 2. **Check React 19 usage** - See [react19-patterns.md](references/react19-patterns.md) for new API patterns 3. **Evaluate state management** - Is state colocated? Server state vs client state separation? 4. **Assess TypeScript safety** - Generic components, discriminated unions, strict config 5. **Review for maintainability** - Component size, hook design, folder structure ## Reference Documents For detailed patterns and examples: - **[react19-patterns.md](references/react19-patterns.md)** - React 19 new hooks (useActionState, useOptimistic, use), Server/Client Component boundaries - **[antipatterns.md](references/antipatterns.md)** - Comprehensive anti-pattern catalog with fixes - **[checklist.md](references/checklist.md)** - Full code review checklist for thorough reviews ## State Management Quick Guide | Data Type | Solution | |-----------|----------| | Server/async data | TanStack Query (never copy to local state) | | Simple global UI state | Zustand (~1KB, no Provider) | | Fine-grained derived state | Jotai (~2.4KB) | | Component-local state | useState/useReducer | | Form state | React 19 useActionState | ### TanStack Query Anti-Pattern ```typescript // ❌ NEVER copy server data to local state const { data } = useQuery({ queryKey: ['todos'], queryFn: fetchTodos }); const [todos, setTodos] = useState([]); useEffect(() => setTodos(data), [data]); // ✅ Query IS the source of truth const { data: todos } = useQuery({ queryKey: ['todos'], queryFn: fetchTodos }); ``` ## TypeScript Config Recommendations ```json { "compilerOptions": { "strict": true, "noUncheckedIndexedAccess": true, "noImplicitReturns": true, "exactOptionalPropertyTypes": true } } ``` `noUncheckedIndexedAccess` is critical - it catches `arr[i]` returning undefined. ## Immediate Red Flags When reviewing, flag these immediately: | Pattern | Problem | Fix | |---------|---------|-----| | `eslint-disable react-hooks/exhaustive-deps` | Hides stale closure bugs | Refactor logic | | Component defined inside component | Remounts every render | Move outside | | `useState(undefined)` for inputs | Uncontrolled warning | Use empty string | | `React.FC` with generics | Generic inference breaks | Use explicit props | | Barrel files (`index.ts`) in app code | Bundle bloat, circular deps | Direct imports |

Related skills

Agent Workflows

Skill Creator

Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that exte…

Agent Workflows

Clawdhub

Use the ClawdHub CLI to search, install, update, and publish agent skills from clawdhub.com. Use when you need to fetch new skills on the fl…

Agent Workflows

Agent Team Orchestration

Orchestrate multi-agent teams with defined roles, task lifecycles, handoff protocols, and review workflows. Use when: (1) Setting up a team …

Agent Workflows

Superpowers

Spec-first, TDD, subagent-driven software development workflow. Use when: (1) building any new feature or app — triggers brainstorm → plan →…