Actor cheatsheet
Get working quickly with actors using our quick reference cheatsheet.
Import spawn
to spawn actors​
Import spawn
to spawn actors:
import { spawn } from 'xstate';
Spawn actors in assign
action creators​
Spawn actors in assign
action creators:
// ...
{
actions: assign({
someRef: (context, event) => spawn(someMachine),
});
}
// ...
Spawn different types of actors​
Spawn different types of actors:
// ...
{
actions: assign({
// From a promise
promiseRef: (context, event) =>
spawn(
new Promise((resolve, reject) => {
// ...
}),
'my-promise',
),
// From a callback
callbackRef: (context, event) =>
spawn((callback, receive) => {
// send to parent
callback('SOME_EVENT');
// receive from parent
receive((event) => {
// handle event
});
// disposal
return () => {
/* do cleanup here */
};
}),
// From an observable
observableRef: (context, event) => spawn(someEvent$),
// From a machine
machineRef: (context, event) =>
spawn(
createMachine({
// ...
}),
),
});
}
// ...
Sync state with an actor​
Sync state with an actor:
// ...
{
actions: assign({
someRef: () => spawn(someMachine, { sync: true }),
});
}
// ...
Get a snapshot from an actor​
Get a snapshot from an actor:
service.onTransition((state) => {
const { someRef } = state.context;
someRef.getSnapshot();
// => State { ... }
});
Send event to actor with send
action creator​
Send an event to an actor with the send
action creator:
// ...
{
actions: send(
{ type: 'SOME_EVENT' },
{
to: (context) => context.someRef,
},
);
}
// ...
Send event with data to actor using a send
expression​
Send an event with data to an actor using the send
expression:
// ...
{
actions: send((context, event) => ({ ...event, type: 'SOME_EVENT' }), {
to: (context) => context.someRef,
});
}
// ...
Send event from actor to parent with sendParent
action creator​
Send an event from an actor to its parent with the sendParent
action creator:
// ...
{
actions: sendParent({ type: 'ANOTHER_EVENT' });
}
// ...
Send event with data from actor to parent using a sendParent
expression​
Send an event with data from an actor to its parent using the sendParent
expression:
// ...
{
actions: sendParent((context, event) => ({
...context,
type: 'ANOTHER_EVENT',
}));
}
// ...
Reference actors from context
​
Reference actors from context
:
someService.onTransition((state) => {
const { someRef } = state.context;
console.log(someRef);
// => { id: ..., send: ... }
});