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 →
Logische architectuur11 minuten lezen·Door het ExodeUI-team

State Machine UI: deterministische, bugvrije interfaces bouwen

Leer hoe visuele statusmachines onmogelijke UI-statussen elimineren, complexe interactieve componenten vereenvoudigen en deterministische, bugvrije interfaces creëren in React.

Directe samenvatting en definitie

Kern afhaalmaaltijd

Een UI-statusmachine is een wiskundig model dat alle geldige toestanden beschrijft die een interfacecomponent kan innemen, en de expliciete overgangen tussen die toestanden die worden veroorzaakt door gebruikersgebeurtenissen of systeemomstandigheden. Staatsmachines elimineren hele categorieën UI-bugs door "onmogelijke toestanden onmogelijk" te maken - uw laadspinner en succesvinkje kunnen niet allebei tegelijkertijd verschijnen als uw staatsmachine die combinatie verbiedt.

Het probleem dat staatsmachines oplossen

De meeste UI-bugs zijn afkomstig van componenten die in een logisch onmogelijke toestand terecht kunnen komen. Een klassiek voorbeeld: een knop voor het indienen van een formulier die geen expliciet statusmodel heeft, kan tegelijkertijd in een "laad" -status en een "uitgeschakeld" -status zijn door twee afzonderlijke Booleaanse vlaggen. Een toestandsmachine voorkomt dit door te eisen dat het onderdeel zich altijd en op elk moment in precies één goed gedefinieerde toestand bevindt.

  • "Boolean flag hell" — isLoading, isDisabled, isError, isSuccess zijn allemaal conflicterend
  • Raceomstandigheden waarbij snelle gebruikers meerdere staten tegelijkertijd activeren
  • Overgangsbugs waarbij animaties starten vanuit onjuiste tussenposities
  • Cognitieve belasting van ontwikkelaars door het volgen van n × n vlagcombinaties bij codebeoordeling

Kernconcepten van staatsmachines

Toestandsmachines bestaan ​​uit een eindige reeks toestanden, een vocabulaire van gebeurtenissen die overgangen kunnen veroorzaken, en bewakingsomstandigheden die bepalen of een overgang is toegestaan.

Staten

Elke toestand vertegenwoordigt een specifieke toestand van de component. Voorbeeld van een component voor het ophalen van gegevens: inactief, laden, succes, fout, vernieuwen.

Gebeurtenissen / Overgangen

Gebeurtenissen veroorzaken toestandsveranderingen. Met "VERZENDEN" wordt een formulier overgezet van inactief naar geladen. "SUCCESS" gaat over van laden naar succes. "ERROR" gaat over van laden naar fout.

Bewakers

Voorwaarden waaraan voldaan moet zijn voor een overgang naar vuur. Een gebeurtenis "SUBMIT" kan de overgang inactief → laden alleen activeren als de formuliervalidatiewacht passeert.

Context / Uitgebreide status

Hulpgegevens die de machine bij zich heeft (gebruikersinvoerwaarden, foutmeldingen, geladen gegevens) naast de huidige statusnaam.

Staatsmachines in ExodeUI

ExodeUI biedt een visuele editor voor knooppuntgrafieken. Je tekent staten als cirkels, verbindt ze met gelabelde pijlen die gebeurtenissen vertegenwoordigen, en voegt aan elke staat veeranimaties en wijzigingen in visuele eigenschappen toe. De machine wordt opgeslagen in het .exode-bestand: in React laad je hem met ExodeUICanvas en stuur je hem via invoer, en in Swift via ExodeUIController.

Productie-implementatiefragment

Implementatie van interactieve componenten
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)}
    />
  );
}

Veelgestelde vragen

Gerelateerde handleidingen en voorbeelden

Ontwerp interactieve UI één keer. Lever hetzelfde bestand.

Bouw states, veerfysica en logica visueel in ExodeUI en speel hetzelfde bestand af in React, SwiftUI, Flutter en meer. Gratis beginnen.

Probeer gratis