XState: tyypitetyt tilakoneet
Mallintakaa tilakoneita TypeScriptillä XStatessa
XState: tyypitetyt tilakoneet on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Miksi XState ja TypeScript
XState mallintaa sovelluksen tilan eksplisiittisinä tilakoneina. TypeScriptin avulla tilat, tapahtumat ja konteksti ovat täysin tyypitettyjä, mikä estää virheelliset tilasiirtymät käännösaikana.
import { createMachine, assign } from "xstate";Koneen tyyppien määrittäminen
XState v5 käyttää tyyppiparametreja kontekstille, tapahtumille ja tiloille. Määritelkää ne ennen koneen luomista.
type TrafficContext = { count: number };
type TrafficEvent =
| { type: "TURN_GREEN" }
| { type: "TURN_YELLOW" }
| { type: "TURN_RED" };Tyypitetyn koneen luominen
Välittäkää konteksti- ja tapahtumatyypit createMachine-funktiolle, jotta tilojen ja siirtymien tyyppitarkistus toimii kattavasti.
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" } },
},
});Tyypitetty konteksti assign-funktiolla
Käyttäkää assign-funktiota kontekstin päivittämiseen — TypeScript varmistaa, että palautettu osittainen konteksti vastaa määriteltyä tyyppiä.
const machine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
// ...
entry: assign({ count: 0 }),
on: {
TURN_GREEN: {
actions: assign(({ context }) => ({ count: context.count + 1 })),
},
},
});Koneen käyttäminen Reactissa
@xstate/react-paketin useMachine-hook palauttaa tyypitetyn tilan ja send-funktion.
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>;
}Tyypitetyt guardit
Guard-funktiot saavat tyypitetyn kontekstin ja tapahtuman, joten ehdot tarkistetaan oikeita tyyppejä vasten.
const machine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
states: {
red: {
on: {
TURN_GREEN: {
guard: ({ context }) => context.count < 10, // context: TrafficContext
target: "green",
},
},
},
},
});Tyypitetyt toiminnot
Nimetyt toiminnot voidaan tyypittää ilmoittamalla ne koneen asetuksissa ja toteuttamalla ne setup-funktion avulla.
import { setup } from "xstate";
const machine = setup({
types: {} as { context: TrafficContext; events: TrafficEvent },
actions: {
logTransition: ({ context, event }) => {
console.log(context.count, event.type);
},
},
}).createMachine({ /* ... */ });Rinnakkaiset tilat
XState tukee rinnakkaisia eli ortogonaalisia alueita. TypeScript seuraa rinnakkaisten tilojen arvoja olioina.
states: {
ui: {
type: "parallel",
states: {
modal: { initial: "closed", states: { closed: {}, open: {} } },
tooltip: { initial: "hidden", states: { hidden: {}, visible: {} } },
},
},
}Tilojen vertailu
Käyttäkää state.matches()-funktiota nykyisen tilan tarkistamiseen — XState tyypittää sen tunnettujen tilannimien perusteella.
const [state] = useMachine(trafficMachine);
if (state.matches("green")) {
// TypeScript knows we're in the green state
}XState Inspector
Yhdistäkää XState Inspector visuaalista tilakoneiden vianmääritystä varten kehityksen aikana menettämättä tyyppiturvallisuutta tuotantokoodissa.
import { inspect } from "@xstate/inspect";
inspect({ iframe: false }); // opens state machine inspectorKertaus: XState-tyypitys
XStaten tyypitetyt koneet määrittelevät konteksti- ja tapahtumatyypit, käyttävät assign-funktiota tyypitettyihin kontekstipäivityksiin ja integroituvat Reactiin useMachine-hookin avulla, jolloin tila ja tapahtumien lähetys ovat täysin tyypitettyjä.
Pikatarkistus
Mitä XState v5:n koneasetusten types-ominaisuus tekee?
Mitä opitte
XState ja TypeScript tarjoavat täysin tyypitetyt tilakoneet: määritelkää konteksti- ja tapahtumatyypit, käyttäkää assign-funktiota tyypitettyihin päivityksiin ja tyypittäkää vartiointiehdot sekä toiminnot. useMachine-hook tarjoaa React-komponenteissa tyypitetyn tilan ja tapahtumien lähetyksen.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 101
- Oppitunnit
- 352
Usein kysytyt kysymykset
Onko oppitunti ”XState: tyypitetyt tilakoneet” ilmainen?
Kyllä – oppitunnin ”XState: tyypitetyt tilakoneet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”XState: tyypitetyt tilakoneet”?
Mallintakaa tilakoneita TypeScriptillä XStatessa Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”XState: tyypitetyt tilakoneet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?
Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Redux Toolkit -slicejen ja thunkien tyypittäminen
- Zustand-storen tyypitysmallit
- XState: tyypitetyt tilakoneet
- Johdettu tila ja selectorit tyyppien kanssa