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

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

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

Примеры reducer-ов на этой странице написаны в стиле Immer: они мутируют draft state и предполагают, что MachineManager создан с immerMiddleware. Без middleware reducer должен вернуть новый объект { state, context }.

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

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

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

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

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

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

  1. Используйте для обновления контекста: self-переходы подходят для изменений данных без смены режима.
  2. Опирайтесь на nextState: при self-переходе MachineManager передаёт в reducer текущее состояние вместо null.
  3. Не прячьте сложный процесс: если обработка события стала ветвистой, выделите отдельное состояние.
  4. Учитывайте effects: при self-переходах effects для конкретных состояний не вызываются, потому что состояние не меняется. Для таких событий используйте effect с ключом "*".
Last updated on