[XState] Use an Interpreter to Instantiate a Machine
Posted answer1215
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[XState] Use an Interpreter to Instantiate a Machine相关的知识,希望对你有一定的参考价值。
While it‘s powerful enough to have Machine.transition
, it can get tedious constantly passing it a state and an event. It would be nice if we had a function that could take a machine, instantiate it, maintain the state of the machine, and give us the ability to send events to it.
This is where an interpreter comes in handy.
And interpreter takes the abstract machine and brings it to life. XState provides us a function, interpret
, to do this. interpret
returns to us a service and we can use that service to send events, subscribe to changes, and add callbacks to events such as onTransition
const { Machine, interpret } = require("xstate"); const lit = { // ‘on‘ keyword present events on: { TOGGLE: "unlit", BROKEN: "broken" } }; const unlit = { on: { TOGGLE: "lit", BROKEN: "broken" } }; const broken = { // you can leave it empty, the same as final state //type: "final" }; const states = { lit, unlit, broken }; const lightBulb = Machine({ id: "lightBulb", initial: "unlit", strict: true, states }); const service = interpret(lightBulb) .onTransition(state => { // Side effect if (state.value === "broken") { console.log("Light bulb is borken"); service.stop(); } // check the state is changed or not if (state.changed) { console.log("changed to: ", state.value); } }) .start(); // unlit when start service.send("TOGGLE"); // lit after toggle service.send("BROKEN"); // borken
以上是关于[XState] Use an Interpreter to Instantiate a Machine的主要内容,如果未能解决你的问题,请参考以下文章
[XState] Use Activities in XState to Run Ongoing Side Effects