Условные переходы и 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