React useEffect — Quando NAO Usar
SkillAI & modelsChecklist de quando NAO usar useEffect, baseado na doc oficial do React ("You Might Not Need an Effect"). Use ao escrever ou revisar useEffect, useState pra valor derivado, data fetching, sincronizacao de estado entre componentes, ou reset de estado ao trocar prop. Trigger em: "useEffect", "efeito colateral", "estado derivado", "sincronizar estado", "resetar estado quando prop muda", "race condition no fetch", "effect chain", "notificar parent via effect", "inicializacao duplicada em dev", "useSyncExternalStore", "por que renderizou duas vezes".
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the React useEffect skill
What this skill tells your AI
The instructions your AI receives, as published by felvieira/claude-skills-fv in skills/79-react-useeffect-review/SKILL.md and read by ahel’s review.
Effects sao uma valvula de escape do React: servem pra sincronizar com um sistema externo (DOM nao-React, API do browser, subscription de store externa). Se nao ha sistema externo envolvido, provavelmente nao precisa de Effect — e o codigo com Effect desnecessario tende a rodar em passes extras, causar race condition ou disparar em momentos inesperados (ex: refresh de pagina).
Esta skill entra em dois momentos: (1) ao escrever um useEffect novo, como
checklist antes de commitar; (2) ao revisar codigo/PR que usa useEffect,
como lente pra achar o antipattern especifico e sugerir a alternativa direta.
Governanca Global
Esta skill segue GLOBAL.md, policies/execution.md, policies/handoffs.md.
Quando Usar
- escrever um
useEffectnovo, como checklist antes de commitar - revisar código/PR que usa
useEffect, pra achar o antipattern específico - componente renderiza duas vezes de forma inesperada, ou tem race condition em fetch
- estado parece sincronizado manualmente quando poderia ser calculado direto
Quando Nao Usar
- a sincronização é de fato com um sistema externo (widget não-React, API de browser, subscription) — aí o Effect é a ferramenta certa
- o código já usa
useSyncExternalStore,keyprop, ou calcula no render corretamente — nada a revisar
Quick Reference
| Situacao | NAO FACA | FACA |
|---|---|---|
| Estado derivado de props/state | useState + useEffect | Calcular durante o render |
| Calculo caro | useEffect pra cachear | useMemo |
| Resetar estado ao mudar prop | useEffect com setState | key prop |
| Resposta a evento do usuario | useEffect observando state | Direto no event handler |
| Notificar parent de uma mudanca | useEffect chamando onChange | Chamar no mesmo event handler |
| Fetch de dados | useEffect sem cleanup | useEffect com cleanup OU lib de fetch |
Arvore de Decisao
Precisa responder a algo?
├── Interacao do usuario (click, submit, drag)?
│ └── EVENT HANDLER
├── Componente apareceu na tela e precisa sincronizar com algo externo?
│ └── EFFECT (widget nao-React, analytics, subscription)
├── Prop/state mudou e precisa de um valor derivado?
│ └── CALCULAR DURANTE O RENDER
│ └── Caro? use useMemo
└── Precisa resetar estado quando uma prop de identidade muda?
└── KEY PROP no componente filho
Quando DE FATO precisa de Effect
- Sincronizar com sistema externo (widget nao-React, API de browser)
- Subscription a store externo (preferir
useSyncExternalStore) - Analytics/log que deve rodar porque o componente foi exibido
- Data fetching com cleanup adequado (ou usar mecanismo de fetch do framework)
Guia Detalhado
- anti-patterns.md — 9 antipatterns com exemplo ruim/bom lado a lado (estado derivado, filtro em Effect, reset via Effect, logica de evento em Effect, chain de Effects, notificar parent, subir dado pro parent, fetch sem cleanup, inicializacao duplicada em dev)
- alternatives.md — as alternativas em detalhe (calcular no render,
useMemo,keyprop, guardar ID em vez de objeto, event handler,useSyncExternalStore, lifting state up, custom hook de fetch)
Evidencia de Conclusao
- código revisado não tem
useEffectcobrindo um dos 9 antipadrões deanti-patterns.md - toda sincronização com sistema externo restante está justificada (subscription, widget não-React, analytics)
Handoff
- Frontend Engineer (skill 04) — recebe o código já revisado antes de integrar com o resto da feature
- Reviewer (skill 11) — pode citar esta skill como critério de qualidade no checklist de código
Integracao com Pipeline
- Frontend Engineer (04): consultar antes de escrever
useEffectnovo, ou ao revisar PR com hooks - Reviewer (11): critério de qualidade de código React durante review final
Fontes
Conteúdo adaptado do skill público react-useeffect do repositório
wealthfolio/wealthfolio
(.claude/skills/react-useeffect/), que por sua vez destila a doc oficial
"You Might Not Need an Effect".
Sem acoplamento a nenhum projeto específico — aplicável a qualquer codebase
React/Next.js do kit.
Signals
- GitHub stars
- 23
- Forks
- 6
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
react-useeffect-review- Source
- github.com/felvieira/claude-skills-fv
github.com/felvieira/claude-skills-fv
Related picks
Skill · thedaviddias
The pick for JavaScriptmodern-javascript-patterns
Skill · wshobson
The pick for JavaScriptlogs-nextjs
Skill · posthog
The pick for Next.jsclerk-nextjs-patterns
Skill · clerk
The pick for Next.jsreact-component-performance
Skill · davila7
The pick for Reactreact-doctor
Skill · millionco
The pick for React