Skip to Content
👋 Добро пожаловать в документацию lite-fsm!

Обработка событий без перехода

Самопереходы в lite-fsm позволяют обрабатывать события без изменения текущего состояния автомата. Это полезно для обновления контекста, выполнения побочных эффектов или обработки событий, которые не должны менять текущий режим работы автомата.

Концепция self-переходов

В стандартной модели конечных автоматов событие обычно вызывает переход из одного состояния в другое. Однако существуют ситуации, когда нужно обработать событие, не меняя текущее состояние. Для этого в lite-fsm используются null-переходы, которые обозначаются значением null в конфигурации автомата.

Определение self-переходов

Self-переходы определяются в конфигурации автомата путем указания null в качестве целевого состояния:

import { createMachine } from "lite-fsm"; export const player = createMachine({ config: { IDLE: { START_PLAYBACK: null, // Событие обрабатывается, но состояние не меняется }, }, initialState: "IDLE", initialContext: { started: false }, reducer: (s, action, { nextState }) => { s.state = nextState; // Обрабатываем событие START_PLAYBACK в редьюсере if (action.type === "START_PLAYBACK") s.context.started = true; }, effects: {}, });

Лучшие практики использования self-переходов

  1. Используйте для обновления контекста: self-переходы идеально подходят для обновления данных без изменения состояния.
  2. Не беспокойтесь о nextState: При self-переходе MachineManager автоматически подставит текущее состояние вместо null, вам не нужно проверять nextState на null.
  3. Избегайте сложной логики в self-переходах: Если обработка события становится сложной, возможно, стоит выделить отдельное состояние.
  4. Учитывайте особенности эффектов: При self-переходах эффекты для конкретных состояний не вызываются, так как состояние не меняется. Для обработки таких событий можно использовать только wildcard-эффекты.
Last updated on