React
SkillDev toolsProjetar, implementar e revisar interfaces React com composição, estado, efeitos, concorrência, acessibilidade, performance e testes. Use quando a tarefa envolve componentes React, hooks, context, forms ou renderização cliente; use também para decidir ownership de estado entre componente, context e biblioteca externa; não use para fronteiras server/client, cache ou routing de framework — aí use a skill Next.js; para a galeria de componentes visuais prontos, use react-ui-components.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the React skill
What this skill tells your AI
The instructions your AI receives, as published by promovaweb/specsfy in specialists/specsfy-specialist-react/SKILL.md and read by ahel’s review.
Quando usar
- Acionar quando o pedido envolve componente, hook, context, formulário, lista, efeito ou estado em React puro (CRA, Vite, RSC-agnóstico).
- Acionar também para revisar por que um componente rerenderiza demais, por que um efeito roda em loop, ou como decidir onde um estado deve viver.
- Não acionar para decisão de Server vs Client Component, cache de dados ou
roteamento de framework; usar
$specsfy-specialist-nextjsnesse caso. - Não acionar para escolher ou adaptar uma biblioteca de componentes visuais
prontos; usar
$specsfy-specialist-react-ui-componentscom$specsfy-specialist-ui-designpara isso. - Combinar com
$specsfy-specialist-typescriptquando o componente expõe props públicas ou modela estado com union discriminada, e com$specsfy-specialist-web-accessibilitypara auditoria aprofundada de teclado e leitor de tela.
Fluxo
- Para uma tela ou formulário, ler
INTERFACE.mde a seção de interface da spec antes do código. Confirmar telas, fluxo de informação, campos, validações, padrão de abertura e estados. Se o material não existir, retornar ao$specsfy-specialist-ux-designe$specsfy-specialist-ui-design; não trocar uma interface pedida por endpoint ou componente vazio. - Confirmar versão do React, renderer, framework (se houver), convenções do
projeto e estratégia de testes já em uso. Quando a tela usar shadcn/ui,
identificar antes a base de primitives instalada, seguindo
$specsfy-specialist-shadcn-ui; nunca deduzir Radix ou Base UI pela aparência do componente. Se.specsfy/STACK.mdnão declarar React ou o projeto não tiver essa dependência, não inicie esta implementação: encaminhe ao especialista da stack observada. - Modelar os estados visíveis (nominal, loading, empty, error, stale, optimistic), os eventos que os produzem e quem é o dono de cada dado.
- Projetar a árvore de componentes com responsabilidades e props pequenas;
preferir composição (
children, slots) a um componente com dezenas de flags booleanas. - Manter cada estado no dono mais próximo capaz de resolvê-lo; derivar
valores durante o render em vez de sincronizar com
useEffect. - Usar effects apenas para sincronizar com um sistema externo (DOM, subscription, rede, storage) — nunca para computar algo a partir de props e state já disponíveis.
- Implementar semântica HTML e navegação por teclado antes do acabamento visual; então cobrir com teste de comportamento observável.
- Medir performance somente quando houver sintoma real (profiler, métrica de produção); então memoizar ou dividir o componente com medição registrada, não por precaução.
- Registrar em
INTERFACE.mdcada bloco criado, alterado ou reaproveitado: responsabilidade, arquivo, props, eventos, estados, acessibilidade e telas consumidoras.
Padrões
- Preferir composição a um componente genérico com muitas props de configuração; dividir quando a árvore de decisão interna cresce.
- Em Laravel com React, usar shadcn/ui para primitives e ReUI para composições
gratuitas. Página e rota compõem blocos React; grade, formulário, filtros,
overlays e cartões reutilizáveis são componentes próprios e documentados em
INTERFACE.md. - Nunca copiar uma prop para
statesó para "guardar o valor inicial"; isso cria dessincronia — leia a prop diretamente ou derive durante o render. - Não usar
useEffectpara computar um valor derivável de props/state existentes; use uma variável comum ouuseMemoquando o cálculo for caro. - Tornar loading, empty, error, stale e success estados explícitos da UI, não
branches implícitos de um único booleano
loading. - Usar
keyestável e vinda dos dados (id) em listas; nunca o índice do array quando a ordem pode mudar, item pode ser removido ou reordenado. - Isolar cada
Context.Providerpela frequência de mudança e responsabilidade — um context que muda a cada tecla não deve envolver a árvore inteira. - Não memoizar (
memo/useMemo/useCallback) sem medição prévia; memoização tem custo de comparação e só compensa com renders caros ou comprovadamente frequentes. - Testar pelo comportamento observável pelo usuário (texto, papel, estado), nunca por detalhes de implementação de hooks internos.
Antipadrões
- Efeito que sincroniza estado local com uma prop
(
useEffect(() => setX(prop), [prop])) — sintoma de estado duplicado; a fonte da verdade já é a prop. - Cadeia de effects que dispara outro effect via mudança de state ("effect chain") — geralmente colapsa em um único handler de evento ou em cálculo direto durante o render.
useEffectsem array de dependências completo, "silenciado" com// eslint-disable— esconde bug de closure obsoleta em vez de resolvê-lo.- Context único guardando todo o estado global da aplicação ("god context") — qualquer mudança rerenderiza toda a árvore; prefira contexts menores ou uma biblioteca de estado dedicada quando o grafo de dependências crescer.
- Confundir este escopo com o de
$specsfy-specialist-nextjs: adicionar"use client"em cascata para "resolver" um erro de hook, em vez de mover a interatividade para o componente folha correto.
Validação
- Percorrer a superfície alterada inteira por teclado e testar com leitor de tela quando houver papel, foco ou anúncio novo.
- Escrever testes para cada estado modelado no passo 2 do Fluxo (nominal, loading, empty, error, stale, optimistic) e para a recuperação de erro.
- Checar o console por warnings do React (chaves, hooks fora de ordem, atualização de estado após unmount) e por avisos de hydration quando houver SSR.
- Rodar profiling ou bundle analysis somente quando uma hipótese concreta de performance existir; anexar a medição antes/depois.
- Não declarar um componente "acessível" ou "performático" sem a comprovação acima; linguagem absoluta sem prova é proibida.
Skills relacionadas
$specsfy-specialist-reuipara composições React e Tailwind do catálogo gratuito.$specsfy-specialist-astrogoverna a fronteira da ilha e$specsfy-specialist-shadcn-uiidentifica a base de primitives e governa os componentes visuais; esta skill governa o comportamento React dentro deles.$specsfy-specialist-tailwind-cssestiliza o componente sem assumir ownership de estado, effect ou concorrência.$specsfy-specialist-nextjspara fronteira server/client, cache de dados e roteamento — este especialista trata React independente de framework.$specsfy-specialist-react-ui-componentse$specsfy-specialist-ui-designpara escolher e compor uma biblioteca visual pronta; este especialista entra depois, para ownership de estado, efeitos e testes.$specsfy-specialist-typescriptpara tipar props, estado e union discriminada de forma exaustiva.$specsfy-specialist-web-accessibilitypara auditoria aprofundada além do teclado básico validado aqui.
Leia references/standards.md para modelagem de estado, effects, composição, listas, context, testes e performance, com fontes oficiais.
Signals
- GitHub stars
- 79
- Forks
- 37
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
specsfy-specialist-react- Source
- github.com/promovaweb/specsfy