Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write React hooks with clean effect boundaries and measured memoization. Use when working with `useEffect`, custom hooks, refs, transitions, or hook dependency problems in React.
.claude/skills/hoangnguyen0403-react-hooks/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 5 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 29% | 0% |
Effects sync external systems. Everything else should stay in render, event handlers, or custom hooks.
useEffect only for subscriptions, timers, network lifecycle, DOM APIs, or other external systems.useEffectEvent when effect logic needs current props/state without widening dependencies.useRef.useMemo / useCallback only for measured hotspots or memoized child contracts.startTransition / useDeferredValue for non-urgent updates.AbortController when an effect owns request cancellation.useEffect subscriptions return cleanup functions?useEffect to sync state.useState(() => heavy()).When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 27,004 | 23,217 | -14% | 1 | 1 | 0% | 3,634 | 3,355 | -8% | 0 | 0 | — |
case-02 | fail→pass | 51,050 | 28,376 | -44% | 1 | 1 | 0% | 4,625 | 4,439 | -4% | 0 | 0 | — |
case-03 | fail→pass | 11,294 | 10,040 | -11% | 1 | 1 | 0% | 2,001 | 2,100 | +5% | 0 | 0 | — |
case-04 | pass→pass | 12,579 | 20,712 | +65% | 1 | 1 | 0% | 2,212 | 2,834 | +28% | 0 | 0 | — |
case-05 | fail→pass | 11,282 | 13,199 | +17% | 1 | 1 | 0% | 1,891 | 2,431 | +29% | 0 | 0 | — |
case-06 | pass→pass | 24,348 | 14,679 | -40% | 1 | 1 | 0% | 2,405 | 2,754 | +15% | 0 | 0 | — |
case-07 | pass→pass | 7,699 | 7,664 | -0% | 1 | 1 | 0% | 1,291 | 1,384 | +7% | 0 | 0 | — |
case-08 | fail→pass | 27,413 | 10,861 | -60% | 1 | 1 | 0% | 1,839 | 2,478 | +35% | 0 | 0 | — |
case-09 | pass→pass | 15,631 | 8,606 | -45% | 1 | 1 | 0% | 2,613 | 1,970 | -25% | 0 | 0 | — |
case-10 | pass→pass | 16,477 | 8,737 | -47% | 1 | 1 | 0% | 1,886 | 1,988 | +5% | 0 | 0 | — |
case-11 | fail→pass | 13,625 | 12,653 | -7% | 1 | 1 | 0% | 2,069 | 2,664 | +29% | 0 | 0 | — |
case-12 | pass→pass | 12,373 | 14,663 | +19% | 1 | 1 | 0% | 2,441 | 2,735 | +12% | 0 | 0 | — |
case-13 | pass→pass | 23,465 | 10,426 | -56% | 1 | 1 | 0% | 2,215 | 1,910 | -14% | 0 | 0 | — |
case-14 | pass→pass | 11,185 | 11,512 | +3% | 1 | 1 | 0% | 1,789 | 2,193 | +23% | 0 | 0 | — |
case-15 | pass→pass | 12,553 | 22,936 | +83% | 1 | 1 | 0% | 2,544 | 2,338 | -8% | 0 | 0 | — |
case-16 | pass→pass | 7,418 | 8,990 | +21% | 1 | 1 | 0% | 1,149 | 2,021 | +76% | 0 | 0 | — |
case-17 | fail→pass | 10,591 | 8,522 | -20% | 1 | 1 | 0% | 1,615 | 1,720 | +7% | 0 | 0 | — |
case-18 | fail→fail | 11,356 | 9,838 | -13% | 1 | 1 | 0% | 1,813 | 2,338 | +29% | 0 | 0 | — |
case-19 | fail→fail | 15,779 | 16,683 | +6% | 1 | 1 | 0% | 1,266 | 2,025 | +60% | 0 | 0 | — |
case-20 | pass→fail | 11,503 | 13,338 | +16% | 1 | 1 | 0% | 2,217 | 3,052 | +38% | 0 | 0 | — |
case-21 | pass→pass | 10,505 | 10,686 | +2% | 1 | 1 | 0% | 1,760 | 2,180 | +24% | 0 | 0 | — |
case-22 | pass→pass | 7,337 | 7,729 | +5% | 1 | 1 | 0% | 1,439 | 1,588 | +10% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.