Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #3969

react-ui-patterns

Ajuda seu agente a criar interfaces de usuário reativas em React. Ele gerencia estados de carregamento, erros e dados de forma eficiente para uma melhor experiência.

O que ela faz

Este código ajuda a criar interfaces de usuário (telas de aplicativos) mais claras e responsivas. Ele garante que os usuários vejam indicadores de carregamento apenas quando necessário, que erros sejam sempre mostrados e que os botões não possam ser clicados várias vezes seguidas.

Quando usar

  • ✓Ao criar novas telas ou componentes em um aplicativo.
  • ✓Quando o aplicativo precisa buscar ou enviar dados.
  • ✓Para garantir que os botões e formulários se comportem corretamente.

Exemplo do que pedir para a IA

“Como posso garantir que o usuário saiba quando algo está carregando ou falhou?”

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/react-ui-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/react-ui-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O código define regras para mostrar mensagens de 'carregando' ou 'erro' apenas quando apropriado. Ele também desabilita botões enquanto uma ação está em andamento para evitar problemas.

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 react-ui-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/react-ui-patterns/SKILL.md -o SKILL.md
Conteú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

Princípios Fundamentais

  1. Nunca mostre UI desatualizada - Indicadores de carregamento apenas quando estiver realmente carregando
  2. Sempre exiba erros - Usuários precisam saber quando algo falha
  3. Atualizações otimistas - Faça a UI parecer instantânea
  4. Divulgação progressiva - Mostre o conteúdo conforme ele fica disponível
  5. Degradação graciosa - Dados parciais são melhores 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,
  });

  const handleSubmit = async () => {
    if (!isValid) {
      toast.error({ title: 'Please fix errors' });
      return;
    }
    await submit({ variables: { input: values } });
  };

  return (
    <form>

…
Perguntas frequentes

O que é um 'estado de carregamento'?

É o que o usuário vê (como um círculo girando) enquanto o aplicativo busca informações ou realiza uma tarefa.

Por que é importante mostrar erros?

Para que o usuário entenda o que deu errado e possa tentar novamente ou saber que algo precisa de atenção.

O que são 'atualizações otimistas'?

É fazer a interface parecer que respondeu instantaneamente, mesmo que a ação ainda esteja sendo processada em segundo plano.

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.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3969
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas