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

Условные переходы и guards

В lite-fsm нет отдельного guard API. Условный переход моделируется в reducer-е: config описывает возможный target, а reducer решает, применять его или оставить прежний state.

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

Что такое guard

Guard — это условие, которое проверяется при обработке события. Если условие проходит, reducer применяет nextState; если нет — возвращает прежнее состояние или оставляет draft без изменения state.

В lite-fsm guards реализуются через функцию reducer, которая решает, применять ли target из config и как обновлять context.

import { createMachine } from "@lite-fsm/core"; const feedback = createMachine({ config: { FORM: { UPDATE: null, SUBMIT: "SUBMITTING", }, SUBMITTING: { // другие переходы }, }, initialState: "FORM", initialContext: { text: "", }, reducer: (state, action, { nextState }) => { if (action.type === "UPDATE") { state.context.text = action.payload.text; return; } // Guard: пустой отзыв не отправляем if (action.type === "SUBMIT" && state.context.text.length === 0) { return; } state.state = nextState; }, });
Last updated on