code-showcase-react-ui-patterns
Faz seu agente usar padrões modernos de React para interfaces. Ele ajuda a lidar com carregamento, erros e dados, tornando as interfaces mais fáceis de usar.
O que ela faz
Esta ferramenta ajuda a criar interfaces de usuário (telas) modernas em React. Ela ensina como mostrar mensagens de 'carregando', 'erro' ou 'vazio' de forma inteligente, para que o usuário sempre saiba o que está acontecendo.
Quando usar
- ✓Ao criar uma nova tela ou componente.
- ✓Quando dados precisam ser carregados da internet.
- ✓Para garantir que o usuário veja mensagens claras de erro ou sucesso.
Exemplo do que pedir para a IA
“Como posso mostrar uma mensagem de 'carregando' apenas quando não há dados?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela usa regras simples para decidir o que mostrar: primeiro verifica se há erro, depois se está carregando sem dados, e por fim se há dados para exibir. Isso evita que a tela pisque ou confunda o usuário.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill code-showcase-react-ui-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/code-showcase-react-ui-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de UI em React
Quando Usar
Use esta habilidade quando precisar de padrões modernos de UI em React para estados de carregamento, tratamento de erros e busca de dados. Use ao construir componentes de UI, lidar com dados assíncronos ou gerenciar estados de UI.
Princípios Fundamentais
- Nunca mostre UI desatualizada - Indicadores de carregamento apenas quando estiver realmente carregando
- Sempre exiba erros - Os usuários precisam saber quando algo falha
- Atualizações otimistas - Faça a UI parecer instantânea
- Divulgação progressiva - Mostre o conteúdo à medida que ele se torna disponível
- Degradação graciosa - Dados parciais são melhores do que nenhum dado
Padrões de Estado de Carregamento
A Regra de Ouro
Mostre o indicador de carregamento APENAS quando não houver dados para exibir.
// CORRECT - Only show loading when no data exists
const { data, loading, error } = useGetItemsQuery();
if (error) return <ErrorState error={error} onRetry={refetch} />;
if (loading && !data) return <LoadingState />;
if (!data?.items.length) return <EmptyState />;
return <ItemList items={data.items} />;
// WRONG - Shows spinner even when we have cached data
if (loading) return <LoadingState />; // Flashes on refetch!
Árvore de Decisão de Estado de Carregamento
Is there an error?
→ Yes: Show error state with retry option
→ No: Continue
Is it loading AND we have no data?
→ Yes: Show loading indicator (spinner/skeleton)
→ No: Continue
Do we have data?
→ Yes, with items: Show the data
→ Yes, but empty: Show empty state
→ No: Show loading (fallback)
Esqueleto vs. Spinner
| Use Esqueleto Quando | Use Spinner Quando |
|---|---|
| Formato de conteúdo conhecido | Formato de conteúdo desconhecido |
| Layouts de lista/cartão | Ações de modal |
| Carregamento inicial da página | Submissões de botão |
| Marcadores de posição de conteúdo | Operações em linha |
Padrões de Tratamento de Erros
Hierarquia de Tratamento de Erros
1. Inline error (field-level) → Form validation errors
2. Toast notification → Recoverable errors, user can retry
3. Error banner → Page-level errors, data still partially usable
4. Full error screen → Unrecoverable, needs user action
Sempre Mostre Erros
CRÍTICO: Nunca ignore erros silenciosamente.
// CORRECT - Error always surfaced to user
const [createItem, { loading }] = useCreateItemMutation({
onCompleted: () => {
toast.success({ title: 'Item created' });
},
onError: (error) => {
console.error('createItem failed:', error);
toast.error({ title: 'Failed to create item' });
},
});
// WRONG - Error silently caught, user has no idea
const [createItem] = useCreateItemMutation({
onError: (error) => {
console.error(error); // User sees nothing!
},
});
Padrão de Componente de Estado de Erro
interface ErrorStateProps {
error: Error;
onRetry?: () => void;
title?: string;
}
const ErrorState = ({ error, onRetry, title }: ErrorStateProps) => (
<div className="error-state">
<Icon name="exclamation-circle" />
<h3>{title ?? 'Something went wrong'}</h3>
<p>{error.message}</p>
{onRetry && (
<Button onClick={onRetry}>Try Again</Button>
)}
</div>
);
Padrões de Estado de Botão
Estado de Carregamento do Botão
<Button
onClick={handleSubmit}
isLoading={isSubmitting}
disabled={!isValid || isSubmitting}
>
Submit
</Button>
Desabilite Durante Operações
CRÍTICO: Sempre desabilite gatilhos durante operações assíncronas.
// CORRECT - Button disabled while loading
<Button
disabled={isSubmitting}
isLoading={isSubmitting}
onClick={handleSubmit}
>
Submit
</Button>
// WRONG - User can tap multiple times
<Button onClick={handleSubmit}>
{isSubmitting ? 'Submitting...' : 'Submit'}
</Button>
Estados Vazios
Requisitos de Estado Vazio
Toda lista/coleção DEVE ter um estado vazio:
// WRONG - No empty state
return <FlatList data={items} />;
// CORRECT - Explicit empty state
return (
<FlatList
data={items}
ListEmptyComponent={<EmptyState />}
/>
);
Estados Vazios Contextuais
// Search with no results
<EmptyState
icon="search"
title="No results found"
description="Try different search terms"
/>
// List with no items yet
<EmptyState
icon="plus-circle"
title="No items yet"
description="Create your first item"
action={{ label: 'Create Item', onClick: handleCreate }}
/>
Padrão de Submissão de Formulário
const MyForm = () => {
const [submit, { loading }] = useSubmitMutation({
onCompleted: handleSuccess,
onError: handleError,
});
…
Perguntas frequentes
O que é um 'estado de carregamento'?
É o que o usuário vê enquanto a informação está sendo buscada, como um círculo girando ou uma área cinza que imita o conteúdo.
Por que é importante mostrar erros?
Para que o usuário saiba que algo deu errado e possa tentar novamente ou entender o problema.
O que são 'atualizações otimistas'?
É quando a interface finge que a ação do usuário já foi concluída (mesmo antes da confirmação do servidor) para dar uma sensação de rapidez.
Detalhes
Descrição original do autor
Modern React UI patterns for loading states, error handling, and data fetching. Use when building UI components, handling async data, or managing UI states.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #2579
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
design-system
Ajuda seu agente a criar um sistema de design a partir de um código existente. Ele extrai informações visuais e verifica a consistência, gerando um relatório e uma prévia interativa.
affaan-m/ECC
liquid-glass-design
Ajuda seu agente a criar interfaces de usuário com efeito 'Liquid Glass' para iOS. Permite adicionar efeitos visuais dinâmicos e interativos em SwiftUI e UIKit.
affaan-m/ECC