react-ban-use-effectlisted
Install: claude install-skill uinaf/agent-skills
# React Ban useEffect
Treat direct effects as an external-synchronization escape hatch, not a default
state-management tool.
## Scope
Effect replacement changes the touched behavior. Repository-wide lint enforcement
is a separate task: apply it when requested or required by existing repository
policy. A review request produces findings; an implementation request authorizes
in-scope replacements and verification without another approval checkpoint.
## Workflow
1. Search the touched React surface for direct imports, namespace calls, and
wrappers around `useEffect`.
2. Classify each effect before editing:
- render-time derivation
- server data or client-owned server state
- user-caused work
- identity-driven reset
- external store or system synchronization
- async UI or performance staging
3. Apply the matching pattern in
[replacements](references/replacements.md). Read
[alternatives](references/alternatives.md) only when the effect exposes a
broader data, form, store, or performance ownership problem.
4. Preserve the repository's framework, data layer, lint shape, and dependency
policy. Add a library only when the request or repository policy authorizes it.
5. Run lint, type, and test gates plus the smallest real UI or hook check for
the changed behavior.
## Decision Order
Prefer, in order:
1. render-time calculation
2. server, loader, or framework data API
3. repository-owned server-state layer
4. event handler, action, or mutation
5