XState: Mesin Status Bertipe
Modelkan mesin status dengan TypeScript dalam XState.
XState: Mesin Status Bertipe adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.
Mengapa Menggunakan XState dengan TypeScript
XState memodelkan state aplikasi sebagai mesin state yang eksplisit. Dengan TypeScript, state, peristiwa, dan konteks sepenuhnya bertipe sehingga transisi state yang tidak valid dapat dicegah saat kompilasi.
import { createMachine, assign } from "xstate";Mendefinisikan Tipe Mesin
XState v5 menggunakan parameter tipe untuk konteks, peristiwa, dan state. Definisikan semuanya sebelum membuat mesin.
type TrafficContext = { count: number };
type TrafficEvent =
| { type: "TURN_GREEN" }
| { type: "TURN_YELLOW" }
| { type: "TURN_RED" };Membuat Mesin Bertipe
Teruskan tipe konteks dan peristiwa Anda ke createMachine untuk pemeriksaan tipe lengkap pada state dan transisi.
const trafficMachine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
id: "traffic",
initial: "red",
context: { count: 0 },
states: {
red: { on: { TURN_GREEN: "green" } },
green: { on: { TURN_YELLOW: "yellow" } },
yellow: { on: { TURN_RED: "red" } },
},
});Konteks Bertipe dengan assign
Gunakan assign untuk memperbarui konteks—TypeScript memastikan konteks parsial yang dikembalikan sesuai dengan tipe yang ditentukan.
const machine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
// ...
entry: assign({ count: 0 }),
on: {
TURN_GREEN: {
actions: assign(({ context }) => ({ count: context.count + 1 })),
},
},
});Menggunakan Mesin dalam React
Kait useMachine dari @xstate/react mengembalikan state dan fungsi pengiriman yang bertipe.
import { useMachine } from "@xstate/react";
function TrafficLight() {
const [state, send] = useMachine(trafficMachine);
// state.value: "red" | "green" | "yellow"
// send: (event: TrafficEvent) => void
return <button onClick={() => send({ type: "TURN_GREEN" })}>Go</button>;
}Penjaga Kondisi Bertipe
Fungsi penjaga tipe menerima konteks dan peristiwa bertipe, sehingga kondisi diperiksa berdasarkan tipe yang benar.
const machine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
states: {
red: {
on: {
TURN_GREEN: {
guard: ({ context }) => context.count < 10, // context: TrafficContext
target: "green",
},
},
},
},
});Aksi Bertipe
Aksi bernama dapat diberi tipe dengan mendeklarasikannya dalam konfigurasi mesin dan mengimplementasikannya melalui setup.
import { setup } from "xstate";
const machine = setup({
types: {} as { context: TrafficContext; events: TrafficEvent },
actions: {
logTransition: ({ context, event }) => {
console.log(context.count, event.type);
},
},
}).createMachine({ /* ... */ });State Paralel
XState mendukung wilayah paralel (ortogonal). TypeScript melacak nilai state untuk state paralel sebagai objek.
states: {
ui: {
type: "parallel",
states: {
modal: { initial: "closed", states: { closed: {}, open: {} } },
tooltip: { initial: "hidden", states: { hidden: {}, visible: {} } },
},
},
}Pencocokan State
Gunakan state.matches() untuk memeriksa state saat ini—XState memberi tipe pada pemeriksaan ini untuk nama state yang telah diketahui.
const [state] = useMachine(trafficMachine);
if (state.matches("green")) {
// TypeScript knows we're in the green state
}XState Inspector
Hubungkan XState Inspector untuk melakukan debug visual pada mesin state selama pengembangan tanpa kehilangan keamanan tipe dalam kode produksi.
import { inspect } from "@xstate/inspect";
inspect({ iframe: false }); // opens state machine inspectorRingkasan: Pemberian Tipe pada XState
Mesin XState bertipe mendefinisikan tipe konteks dan peristiwa, menggunakan assign untuk pembaruan konteks bertipe, serta terintegrasi dengan React melalui useMachine untuk state dan pengiriman peristiwa yang sepenuhnya bertipe.
Pemeriksaan Singkat
Apa fungsi properti types dalam konfigurasi mesin XState v5?
Yang Anda Pelajari
XState dengan TypeScript memberikan mesin state yang sepenuhnya bertipe: definisikan tipe konteks dan peristiwa, gunakan assign untuk pembaruan bertipe, penjagaan kondisi, dan aksi. Kait useMachine menyediakan state dan pengiriman bertipe dalam komponen React.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “XState: Mesin Status Bertipe” gratis?
Ya — teks lengkap “XState: Mesin Status Bertipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “XState: Mesin Status Bertipe”?
Modelkan mesin status dengan TypeScript dalam XState. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai TypeScript Academy?
Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “XState: Mesin Status Bertipe” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menentukan Tipe Slice dan Thunk Redux Toolkit
- Pola Penentuan Tipe Store Zustand
- XState: Mesin Status Bertipe
- Status Turunan dan Selector dengan Tipe