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 →
Architecture logique11 minutes de lecture·Par l’équipe ExodeUI

Interface utilisateur de State Machine : création d'interfaces déterministes et sans bugs

Découvrez comment les machines à états visuels éliminent les états impossibles de l'interface utilisateur, simplifient les composants interactifs complexes et créent des interfaces déterministes et sans bug dans React.

Résumé et définition

À retenir

Une machine à états d'interface utilisateur est un modèle mathématique qui décrit tous les états valides qu'un composant d'interface peut occuper, ainsi que les transitions explicites entre ces états déclenchées par des événements utilisateur ou des conditions système. Les machines à états éliminent des catégories entières de bogues de l'interface utilisateur en rendant les « états impossibles impossibles » : votre flèche de chargement et votre coche de réussite ne peuvent pas apparaître simultanément si votre machine à états interdit cette combinaison.

Le problème que les machines à états résolvent

La plupart des bogues de l'interface utilisateur proviennent de composants qui peuvent entrer dans des états logiquement impossibles. Un exemple classique : un bouton de soumission de formulaire qui n'a pas de modèle d'état explicite peut être simultanément dans un état "chargement" et un état "désactivé" à partir de deux indicateurs booléens distincts. Une machine à états évite cela en exigeant que le composant soit toujours dans exactement un état bien défini à tout moment.

  • "L'enfer du drapeau booléen" - isLoading, isDisabled, isError, isSuccess sont tous en conflit
  • Conditions de course dans lesquelles les utilisateurs rapides déclenchent plusieurs états simultanément
  • Bugs de transition où les animations démarrent à partir de positions intermédiaires incorrectes
  • Charge cognitive du développeur résultant du suivi des combinaisons d'indicateurs n × n lors de la révision du code

Concepts de base des machines à états

Les machines à états se composent d'un ensemble fini d'états, d'un vocabulaire d'événements pouvant déclencher des transitions et de conditions de garde qui déterminent si une transition est autorisée.

États

Chaque état représente une condition spécifique du composant. Exemple pour un composant de récupération de données : inactivité, chargement, succès, erreur, actualisation.

Événements / Transitions

Les événements déclenchent des changements d’état. "SUBMIT" fait passer un formulaire du mode inactif au mode chargement. "SUCCÈS" passe du chargement au succès. "ERREUR" passe du chargement à l'erreur.

Gardes

Conditions qui doivent être vraies pour une transition vers le feu. Un événement "SUBMIT" ne peut déclencher la transition veille → chargement que si la garde de validation du formulaire passe.

Contexte / État étendu

Données auxiliaires transportées par la machine (valeurs saisies par l'utilisateur, messages d'erreur, données chargées) ainsi que le nom de l'état actuel.

Machines à états dans ExodeUI

ExodeUI fournit un éditeur visuel de machine d'état de graphique de nœud. Vous dessinez les états sous forme de cercles, les connectez avec des flèches étiquetées représentant des événements et attachez des animations printanières et des modifications de propriétés visuelles à chaque état. La machine est enregistrée dans le fichier .exode : dans React, vous la chargez avec ExodeUICanvas et la pilotez via les entrées, et dans Swift via ExodeUIController.

Extrait d’implémentation en production

Implémentation du composant interactif
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)}
    />
  );
}

Questions fréquentes

Guides et exemples associés

Concevez l’UI interactive une fois. Livrez le même fichier.

Créez états, physique des ressorts et logique visuellement dans ExodeUI, et lisez le même fichier dans React, SwiftUI, Flutter et plus. Gratuit pour commencer.

Essayer gratuitement