Я новичок в xstate, и я пытаюсь использовать его в приложении, где пользователь может запрашивать разные вещи в приложении на основе родительского состояния и/или подсостояния. Однако есть некоторые запросы, которые пользователь должен иметь возможность делать независимо от того, в каком состоянии/подсостоянии находится приложение. Реакция на эти события одинакова, независимо от предыдущего состояния. Как я могу настроить это событие, чтобы мне не приходилось повторять его определение во всех состояниях/подсостояниях?
Можно ли с помощью xstate настроить событие, применимое во всех состояниях и одинаково обрабатываемое во всех состояниях и подсостояниях?
Ответы (1)
Да — алгоритм выбора переходов аналогичен распространению событий DOM в том смысле, что он ищет от листовых узлов к корневому узлу.
Вы можете определить переходы на корневом узле (верхний уровень), которые будут обрабатываться в любом состоянии естественным образом:
import { createMachine } from 'xstate';
const machine = createMachine({
// ...
// top-level transitions
on: {
ESC: {/* ... */}
},
states: {
// ...
someState: {
on: {
ESC: {/* override top-level transition */}
}
}
}
});
person
David Khourshid
schedule
24.04.2020
О, это прекрасно, именно то, что мне нужно!
- person curiousWebDev; 24.04.2020
извините за оффтоп, я ищу противоположное поведение, в словах DOM - всплытие события до корневого узла (и выполнение действий во всех состояниях, где событие определено). это возможно с xstate?
- person Valentin Kantor; 19.07.2021
@ValentinKantor Это невозможно с алгоритмом (который следует алгоритму SCXML).
- person David Khourshid; 21.07.2021