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: ... }
});