Skip to content
Back to skills

79 React Useeffect Review

ASecurity

Checklist React para decidir quando não usar useEffect em estado derivado, fetch, sincronização e reset de props. Trigger em: "useEffect", "estado derivado", "race condition no fetch", "sincronizar estado", "resetar estado quando prop muda", "effect chain", "notificar parent via effect", "useSyncExternalStore", "por que renderizou duas vezes".

  • 28 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 28, 2026
developmentgoreactnextjsgitapifrontend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned November 9, 2026

npx -y skills add felvieira/claude-skills-fv --skill 79-react-useeffect-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 79 React Useeffect Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 79 React Useeffect Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/felvieira-79-react-useeffect-review/badge)](https://www.skillsdirectory.com/skills/felvieira-79-react-useeffect-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: react-useeffect-review
description: |
  Checklist React para decidir quando não usar useEffect em estado derivado, fetch,
  sincronização e reset de props. Trigger em: "useEffect", "estado derivado",
  "race condition no fetch", "sincronizar estado", "resetar estado quando prop muda",
  "effect chain", "notificar parent via effect", "useSyncExternalStore",
  "por que renderizou duas vezes".
---

# React useEffect — Quando NAO Usar

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 `useEffect` novo, 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`, `key` prop, 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](./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](./alternatives.md) — as alternativas em detalhe (calcular no render, `useMemo`, `key` prop, 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 `useEffect` cobrindo um dos 9 antipadrões de `anti-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 `useEffect` novo, 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](https://github.com/wealthfolio/wealthfolio)
(`.claude/skills/react-useeffect/`), que por sua vez destila a doc oficial
["You Might Not Need an Effect"](https://react.dev/learn/you-might-not-need-an-effect).
Sem acoplamento a nenhum projeto específico — aplicável a qualquer codebase
React/Next.js do kit.

Files in this skill

  • SKILL.md5.3 KB
  • alternatives.md6.1 KB
  • anti-patterns.md6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.