Использование вложенных состояний в xstate

Я работаю над проектом домашней автоматизации с двумя лампочками. Пожалуйста, обратитесь к следующей диаграмме состояний, которую я создал с помощью xstate. У меня также есть суть, так что вы можете увидеть ее и в визуализаторе.

https://xstate.js.org/viz/?gist=119995cdff639c5b99df55278a32cf57

диаграмма xstate

Вы можете видеть, что мне нужно быть в состоянии autoInactive, чтобы я мог включать и выключать лампочки, это работает нормально. Проблема в состоянии autoActive Я хотел по-прежнему включать и выключать лампочки, но используя датчик движения.

Итак, вот что я пытаюсь сделать.

  • autoInactive — пользователь может использовать пользовательский интерфейс для включения и выключения лампочек.
  • autoActive - пользователь не может управлять лампочками, но датчик движения включает и выключает их.

Как вы можете добиться этого, используя xstate?


person Neil    schedule 10.05.2020    source источник
comment
Используйте переменную контекста. Установите значение true для события autoActive. Используйте его значение, чтобы решить, будут ли события от пользователя переключать состояние лампочки.   -  person Andrej Kirejeŭ    schedule 19.05.2020
comment
В итоге я использовал autoActive для отключения пользовательского интерфейса, потому что, если я использую переменную контекста, то autoActive не может также вызывать переднее и заднее состояния, поэтому я хочу, чтобы пользователь и авто использовали эти два состояния.   -  person Neil    schedule 19.05.2020


Ответы (1)


Я знаю, вы сказали, что уже решили проблему, но я просто играл, чтобы посмотреть, как я решу это, так что, возможно, это поможет вам или кому-то еще.

В основном я подошел к проблеме немного по-другому (и это может не сработать в вашем контексте). Я думал, что состояние освещения (включено или выключено) на самом деле совершенно не зависит от того, в каком режиме вы находитесь (автоматический или ручной). Таким образом, я получил два параллельных состояния: одно для простого управления состоянием источников света и одно состояние интерфейса управления, которое позволяет по-разному управлять источниками света в зависимости от режима, в котором вы находитесь:

введите здесь описание изображения

https://xstate.js.org/viz/?gist=4b815be2cc42e6e51b15ba39c99d53dc

person Thomas Kuhlmann    schedule 25.03.2021