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 →
논리 아키텍처11분 읽기·ExodeUI 팀

상태 머신 UI: 확정적이고 버그 없는 인터페이스 구축

React에서 시각적 상태 머신이 불가능한 UI 상태를 제거하고 복잡한 대화형 구성 요소를 단순화하며 결정적이고 버그 없는 인터페이스를 만드는 방법을 알아보세요.

핵심 요약과 정의

핵심 포인트

UI 상태 머신은 인터페이스 구성 요소가 차지할 수 있는 모든 유효한 상태와 사용자 이벤트 또는 시스템 조건에 의해 트리거되는 해당 상태 간의 명시적인 전환을 설명하는 수학적 모델입니다. 상태 머신은 "불가능한 상태 불가능"을 만들어 UI 버그의 전체 범주를 제거합니다. 상태 머신이 해당 조합을 금지하는 경우 로딩 스피너와 성공 확인 표시가 동시에 나타날 수 없습니다.

문제 상태 머신이 해결하는 문제

대부분의 UI 버그는 논리적으로 불가능한 상태로 들어갈 수 있는 구성 요소에서 발생합니다. 전형적인 예: 명시적인 상태 모델이 없는 양식 제출 버튼은 두 개의 별도 부울 플래그로 인해 "로드 중" 상태와 "비활성화" 상태가 동시에 될 수 있습니다. 상태 머신은 구성 요소가 항상 정확히 하나의 잘 정의된 상태에 있도록 요구하여 이를 방지합니다.

  • "부울 플래그 지옥" — isLoading, isDisabled, isError, isSuccess 모두 충돌함
  • 빠른 사용자가 여러 상태를 동시에 트리거하는 경쟁 조건
  • 애니메이션이 잘못된 중간 위치에서 시작되는 전환 버그
  • 코드 검토에서 n × n 플래그 조합 추적으로 인한 개발자 인지 부하

핵심 상태 머신 개념

상태 머신은 유한한 상태 세트, 전환을 트리거할 수 있는 이벤트 어휘, 전환 허용 여부를 결정하는 보호 조건으로 구성됩니다.

상태

각 상태는 구성 요소의 특정 조건을 나타냅니다. 데이터 가져오기 구성 요소의 예: 유휴, 로드 중, 성공, 오류, 새로 고침.

이벤트 / 전환

이벤트는 상태 변경을 트리거합니다. "SUBMIT"은 양식을 유휴 상태에서 로드 상태로 전환합니다. "SUCCESS"는 로딩에서 성공으로 전환됩니다. "ERROR"는 로드에서 오류로 전환됩니다.

근위 연대

화재로의 전환에 대해 참이어야 하는 조건입니다. "SUBMIT" 이벤트는 양식 유효성 검사 가드가 통과한 경우에만 유휴 → 로딩 전환을 트리거할 수 있습니다.

컨텍스트/확장 상태

현재 상태 이름과 함께 기계가 전달하는 보조 데이터(사용자 입력 값, 오류 메시지, 로드된 데이터)입니다.

ExodeUI의 상태 머신

ExodeUI는 시각적 노드 그래프 상태 머신 편집기를 제공합니다. 상태를 원으로 그리고 이벤트를 나타내는 레이블이 지정된 화살표로 연결하고 스프링 애니메이션과 시각적 속성 변경 사항을 각 상태에 첨부합니다. 머신은 .exode 파일에 저장됩니다. React에서는 ExodeUICanvas로 로드하고 입력을 통해 구동하고 Swift에서는 ExodeUIController를 통해 구동합니다.

프로덕션 구현 예시

인터랙티브 컴포넌트 구현
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)}
    />
  );
}

자주 묻는 질문

관련 가이드와 예제

인터랙티브 UI는 한 번만 디자인하고, 같은 파일을 배포하세요.

ExodeUI에서 상태, 스프링 물리, 로직을 시각적으로 만들고 같은 파일을 React, SwiftUI, Flutter 등에서 재생하세요. 무료로 시작할 수 있습니다.

무료로 사용해 보기