Обработка событий без перехода
Самопереходы в 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-переходов
- Используйте для обновления контекста: self-переходы идеально подходят для обновления данных без изменения состояния.
- Не беспокойтесь о nextState: При self-переходе MachineManager автоматически подставит текущее состояние вместо null, вам не нужно проверять nextState на null.
- Избегайте сложной логики в self-переходах: Если обработка события становится сложной, возможно, стоит выделить отдельное состояние.
- Учитывайте особенности эффектов: При self-переходах эффекты для конкретных состояний не вызываются, так как состояние не меняется. Для обработки таких событий можно использовать только wildcard-эффекты.
Last updated on