Глобальный переход в состояние "лови все, делай, убирай, уходи"

У меня есть состояние перехвата всех ошибок, которое делает некоторую очистку для моего приложения и завершается красиво.

В настоящее время я должен создать конкретное событие {type: "unexpected_error"} и добавить переход к каждому состоянию моей машины, чтобы добиться этого.

Есть ли более простой способ указать переход для всех состояний, чтобы мне не приходилось добавлять этот переход в каждое состояние?

1 ответ

Решение

Да! Вы можете размещать переходы на машине верхнего уровня.

const machine = Machine({
  // ...
  states: { /*...*/ },
  // top-level transition
  on: {
    "unexpected-error": { actions: /*...*/ }
  }
});

В качестве альтернативы, поскольку это просто объект JavaScript, вы можете создать вспомогательную функцию:

function transitionsWithErrorHandler(transitions) {
  return {
    ...transitions,
    "unexpected-error": { actions: /*...*/ }
  }
}

// ...
states: {
  foo: {
    on: transitionsWithErrorHandler({
      EVENT: 'bar',
      ANOTHER_EVENT: 'baz'
    })
  }
}
Другие вопросы по тегам