> react-hooks
Write efficient React functional components and hooks. Use when writing custom hooks, optimizing useEffect, or working with useMemo/useCallback in React. (triggers: **/*.tsx, **/*.jsx, useEffect, useCallback, useMemo, useState, useRef, useContext, useReducer, useLayoutEffect, custom hook)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/react-hooks?format=md"React Hooks Expert
Priority: P0 (CRITICAL)
You are a React Performance Expert. Optimize renders and prevent memory leaks.
Implementation Guidelines
- Dependency Arrays: exhaustive-deps is Law. Objects/arrays are recreated each render, causing infinite loops if not handled. Fix by ensuring objects/arrays are memoized with
useMemobefore putting them in deps, or usinguseReffor stable refs. - Memoization: useMemo for heavy calc (expensive computed values) and useCallback for props (stabilize function references for memoized children). Measure first to avoid premature complexity.
- Custom Hooks: Extract logic starting with use... — use
useStatefor internal state and return only what's needed. useEffect: Sync with external systems ONLY. Cleanup required for subscriptions/event listeners. Return cleanup function from the effect. UseAbortControllerfor fetch cleanup to prevent state updates after unmount.useRef: Mutable state without re-renders (DOM, timers, tracking).useMemo/Callback: Measure first. Use for stable refs or heavy computation.- Stability: Use
useLatestpattern (ref) for event handlers to avoid dependency changes; see the useLatest ref pattern example for a reference implementation. - Concurrency:
useTransition/useDeferredValuefor non-blocking UI updates. - Initialization: Lazy state
useState(() => expensive()).
Performance Checklist (Mandatory)
- Rules of Hooks: Called at top level? No loops/conditions?
- Dependencies: Are objects/arrays memoized before passing to deps?
- Cleanup: Do
useEffectsubscriptions return cleanup functions? - Render Count: Does component re-render excessively?
Anti-Patterns
- No Missing Deps: Fix logic, don't disable linter.
- No Complex Effects: Break tailored effects into smaller ones.
- No Derived State: Compute during render, don't
useEffectto sync state. - No Heavy Init: Use lazy state initialization
useState(() => heavy()).
References
> related_skills --same-repo
> common-store-changelog
Generate user-facing release notes for the Apple App Store and Google Play Store by collecting git history, triaging user-impacting changes, and drafting store-compliant changelogs. Enforces character limits (App Store ≤4000, Google Play ≤500), tone, and bullet format. Use when generating release notes, app store changelog, play store release, what's new, or version release notes for any mobile app. (triggers: generate changelog, app store notes, play store release, what's new, release notes, ve
> golang-tooling
Go developer toolchain — gopls LSP diagnostics, linting, formatting, and vet. Use when setting up Go tooling, running linters, or integrating gopls with Claude Code. (triggers: gopls, golangci-lint, golangci.yml, go vet, goimports, staticcheck, go tooling, go lint)
> common-ui-design
Design distinctive, production-grade frontend UI with bold aesthetic choices. Use when building web components, pages, interfaces, dashboards, or applications in any framework (React, Next.js, Angular, Vue, HTML/CSS). (triggers: build a page, create a component, design a dashboard, landing page, UI for, build a layout, make it look good, improve the design, build UI, create interface, design screen)
> common-owasp
OWASP Top 10 audit checklist for Web Applications (2021) and APIs (2023). Load during any security review, PR review, or codebase audit touching web, mobile backend, or API code. (triggers: security review, OWASP, broken access control, IDOR, BOLA, injection, broken auth, API review, authorization, access control)