Vue에서 XState로 상태 머신 만들기
XState v5와 함께 useMachine()을 사용하고, 상태와 전환을 정의하며, DevTools에서 머신을 시각화합니다.
Vue에서 XState로 상태 머신 만들기은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
state 머신이 필요한 이유
isLoading, isError, isSuccess 같은 불리언 플래그는 서로 모순되는 조합으로 변할 수 있습니다. state 머신은 유한한 state 집합과 그 사이에서 허용되는 전이를 모델링하므로 잘못된 state를 표현할 수 없게 합니다.
엑스스테이트 소개
엑스스테이트는 JavaScript에서 유한 상태 머신과 상태 차트를 사용하기 위한 라이브러리입니다. @xstate/vue 패키지는 컴포저블을 통해 Vue의 반응성과 통합됩니다.
// terminal
// npm install xstate @xstate/vue머신 정의하기
createMachine은 state와 전이를 설명합니다. 각 state는 on 아래에 이벤트를 나열하고, 이벤트가 대상 state로 이동하도록 합니다.
import { createMachine } from "xstate"
const toggleMachine = createMachine({
id: "toggle",
initial: "inactive",
states: {
inactive: { on: { TOGGLE: "active" } },
active: { on: { TOGGLE: "inactive" } },
},
})상태와 전이
머신은 initial에서 시작합니다. 현재 state의 on 아래에 있는 이벤트를 보내면 이름이 지정된 대상 state로 전이합니다. 나열되지 않은 이벤트는 단순히 무시되므로 잘못된 전이는 발생할 수 없습니다.
데이터 가져오기 머신
비동기 흐름에서는 state 머신이 특히 유용합니다. 데이터 가져오기는 유휴, 로딩, 성공, 실패라는 명확한 state를 가지며, 각 state 사이에 적절한 전이가 있습니다.
const fetchMachine = createMachine({
initial: "idle",
states: {
idle: { on: { FETCH: "loading" } },
loading: { on: { RESOLVE: "success", REJECT: "failure" } },
success: {},
failure: { on: { RETRY: "loading" } },
},
})Vue에서 useMachine 사용하기
@xstate/vue의 useMachine은 컴포넌트 안에서 머신을 실행하고 반응형 snapshot과 send 함수를 반환합니다.
import { useMachine } from "@xstate/vue"
const { snapshot, send } = useMachine(fetchMachine)현재 state 읽기
반응형 snapshot에는 현재 state가 담깁니다. snapshot.value.matches("loading")으로 확인하면 조건부 렌더링에 적합합니다.
// template
// <Spinner v-if="snapshot.matches('loading')" />
// <Error v-if="snapshot.matches('failure')" />
console.log(snapshot.value.value) // "idle"이벤트 보내기
이벤트와 함께 send를 호출하여 전이를 트리거합니다. 현재 state에 해당 전이가 정의된 경우에만 머신이 다음 state로 이동합니다.
function load() {
send({ type: "FETCH" })
}
// later, on resolve:
// send({ type: "RESOLVE" })템플릿에서 이벤트 연결하기
UI 동작을 send에 연결합니다. state 머신은 버튼이 유효한 방식으로만 흐름을 진행하도록 보장합니다.
<template>
<button @click="send({ type: 'FETCH' })">Load</button>
<button v-if="snapshot.matches('failure')" @click="send({ type: 'RETRY' })">
Retry
</button>
</template>추가 데이터를 위한 context
머신은 가져온 결과나 오류 메시지 같은 확장 데이터인 context를 보유할 수 있으며, 전이 중 액션으로 업데이트됩니다. state는 유한하게 유지되고 context가 변경되는 데이터를 담습니다.
createMachine({
context: { data: null, error: null },
initial: "idle",
states: { /* assign to context in transitions */ },
})개발 도구로 시각화하기
엑스스테이트 머신은 다이어그램으로 시각화할 수 있습니다. 엑스스테이트 개발 도구와 스테이틀리 검사기는 실행 중인 머신을 렌더링하고, 현재 state를 강조하며, 전이를 다시 실행할 수 있게 해 줍니다. 복잡한 흐름을 이해하는 데 매우 유용합니다.
빠른 확인
Vue에서 엑스스테이트를 사용하는 방법에 대한 이해도를 확인해 보십시오.
복습
엑스스테이트를 사용한 state 머신을 배웠습니다.
- state 머신은 유한한 state와 허용되는 전이를 정의하여 잘못된 state를 불가능하게 만듭니다.
createMachine은on이벤트에서 대상 state로 이어지는 전이를 포함한states를 선언합니다.@xstate/vue의useMachine은 반응형snapshot과send를 반환합니다.snapshot.matches("...")로 state를 읽고,send({ type })로 전이를 트리거합니다.context는 추가 데이터를 담고, 엑스스테이트 개발 도구는 머신을 시각화합니다.
자주 묻는 질문
“Vue에서 XState로 상태 머신 만들기” 강의는 무료인가요?
네 — “Vue에서 XState로 상태 머신 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Vue에서 XState로 상태 머신 만들기”에서 뭘 배우나요?
XState v5와 함께 useMachine()을 사용하고, 상태와 전환을 정의하며, DevTools에서 머신을 시각화합니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Vue Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Vue에서 XState로 상태 머신 만들기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 고급 반응성: shallowRef와 triggerRef
- 컴포저블 팩토리와 매개변수화된 컴포저블
- Vue에서 XState로 상태 머신 만들기
- 그룹화된 효과를 위한 effectScope