XState. js Как отправить контекст на компьютер? - PullRequest
1 голос
/ 05 января 2020

Я новичок в XState. js.

Я хочу использовать простой идентификатор в моем контексте. Как обновить контекст, используя machine.send()?


     const fetchMachine = Machine(
        {
          id: 'test',
          initial: 'init',
          context: {
            id: '',
          },
          states: {
            init: {
              on: {
                LOGIN: 'fetch',
              },
            },
            fetch: {
              on: {
                LOGOUT: 'init',
              },
            },
          }
       })


      const machine = interpret(fetchMachine).start()

Как передать идентификатор в контекст?

Это НЕ делает трюк:

      machine.send({ type: 'LOGIN', id })

1 Ответ

2 голосов
/ 06 января 2020

Вы должны использовать назначить действие для обновления контекста, я обновил ваш пример ниже:

import { Machine, assign } from 'xstate';

// Action to assign the context id
const assignId = assign({
  id: (context, event) => event.id
});

export const testMachine = Machine(
  {
    id: 'test',
    initial: 'init',
    context: {
      id: '',
    },
    states: {
      init: {
        on: {
          LOGIN: {
            target: 'fetch',
            actions: [
              assignId
            ]
          }
        },
      },
      fetch: {
        on: {
          LOGOUT: 'init',
        },
      },
    }
  },
  {
    actions: { assignId }
  }
);

Итак, теперь, когда вы вызываете следующее:

import { testMachine } from './machines';

const testService = interpret(testMachine).start();
testService.send({type: 'LOGIN', id: 'test' });
//or mouseService.send('LOGIN', { id: 'test'});

действие assignId назначит данные из события вашему контексту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...