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