Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
Arquitetura Lógica11 minutos de leitura·Pela equipe ExodeUI

UI da máquina de estado: construindo interfaces determinísticas e livres de erros

Aprenda como as máquinas de estado visual eliminam estados de UI impossíveis, simplificam componentes interativos complexos e criam interfaces determinísticas e livres de erros no React.

Resumo direto e definição

Ponto principal

Uma máquina de estados de UI é um modelo matemático que descreve todos os estados válidos que um componente de interface pode ocupar e as transições explícitas entre esses estados acionadas por eventos do usuário ou condições do sistema. As máquinas de estado eliminam categorias inteiras de bugs da interface do usuário, tornando impossíveis os "estados impossíveis" - o botão giratório de carregamento e a marca de verificação de sucesso não podem aparecer simultaneamente se sua máquina de estado proibir essa combinação.

O problema que as máquinas de estado resolvem

A maioria dos bugs de UI se origina de componentes que podem entrar em estados logicamente impossíveis. Um exemplo clássico: um botão de envio de formulário que não possui modelo de estado explícito pode estar simultaneamente no estado "carregando" e no estado "desativado" a partir de dois sinalizadores booleanos separados. Uma máquina de estados evita isso exigindo que o componente esteja sempre exatamente em um estado bem definido a qualquer momento.

  • "Boolean flag hell" — isLoading, isDisabled, isError, isSuccess todos conflitantes
  • Condições de corrida onde usuários rápidos acionam vários estados simultaneamente
  • Bugs de transição onde as animações começam em posições intermediárias incorretas
  • Carga cognitiva do desenvolvedor ao rastrear combinações de sinalizadores n × n na revisão de código

Conceitos centrais de máquina de estado

As máquinas de estado consistem em um conjunto finito de estados, um vocabulário de eventos que podem desencadear transições e condições de guarda que determinam se uma transição é permitida.

Estados

Cada estado representa uma condição específica do componente. Exemplo de um componente de busca de dados: inativo, carregamento, sucesso, erro, atualização.

Eventos/Transições

Os eventos desencadeiam mudanças de estado. "SUBMIT" faz a transição de um formulário de inativo para carregamento. Transições de "SUCESSO" do carregamento para o sucesso. Transições "ERROR" do carregamento para o erro.

Guardas

Condições que devem ser verdadeiras para uma transição para o fogo. Um evento "SUBMIT" só pode acionar a transição inativo → carregamento se a proteção de validação do formulário for aprovada.

Contexto/Estado Estendido

Dados auxiliares que a máquina carrega (valores de entrada do usuário, mensagens de erro, dados carregados) junto com o nome do estado atual.

Máquinas de estado em ExodeUI

ExodeUI fornece um editor visual de máquina de estado de gráfico de nó. Você desenha estados como círculos, conecta-os com setas rotuladas que representam eventos e anexa animações de primavera e alterações de propriedades visuais a cada estado. A máquina é salva no arquivo .exode: em React você a carrega com ExodeUICanvas e aciona através de entradas, e em Swift através de ExodeUIController.

Trecho de implementação em produção

Implementação do componente interativo
import { ExodeUICanvas } from 'exodeui';

// Springs, states and timing live in the .exode file (designed in the
// editor). Your code passes inputs in and hears events back.
export function AuthFlow() {
  return (
    <ExodeUICanvas
      src="/auth_flow.bexode"
      onTrigger={(name) => console.log('ExodeUI event:', name)}
    />
  );
}

Perguntas frequentes

Guias e exemplos relacionados

Projete a UI interativa uma vez. Entregue o mesmo arquivo.

Crie estados, física de molas e lógica visualmente no ExodeUI e reproduza o mesmo arquivo em React, SwiftUI, Flutter e outros. Comece grátis.

Experimente grátis