Я использовал иерархический конечный автомат пример из документов, чтобы попытаться смоделировать это, добавив следующее в хвостовой части примера:
on: {
POWER_OUTAGE: '.red.blinking',
POWER_RESTORED: '.red',
POWER_TEST: {
target: '.red.stop',
cond: {
type: 'test'
}
}
}
},{
guards: {
test: () => true
}
});
Кажется, это работает как ожидается, что вы можете попробовать этот пример машины и охранника в визуализаторе здесь
Вы можете перевернуть логическое значение в тестовом гвардии, чтобы поиграть с ним, работающим / не работающим.
А вот полный код примера для справки:
const pedestrianStates = {
initial: 'walk',
states: {
walk: {
on: {
PED_COUNTDOWN: 'wait'
}
},
wait: {
on: {
PED_COUNTDOWN: 'stop'
}
},
stop: {},
blinking: {}
}
};
const lightMachine = Machine({
key: 'light',
initial: 'green',
states: {
green: {
on: {
TIMER: 'yellow'
}
},
yellow: {
on: {
TIMER: 'red'
}
},
red: {
on: {
TIMER: {
target: 'green',
cond: {
type: 'searchValid'
}
}
},
...pedestrianStates
}
},
on: {
POWER_OUTAGE: '.red.blinking',
POWER_RESTORED: '.red',
POWER_TEST: {
target: '.red.stop',
cond: {
type: 'test'
}
}
}
},{
guards: {
test: () => true
}
});