Я работаю с оптимистичными обновлениями в приложении React + Flux и видел две вещи:
- Что произойдет, если пользователь попытается закрыть окно, когда есть некоторые незавершенные действия. Например, в Facebook сообщение появляется в стене, даже если оно не было действительно сохранено (это то, что оптимистичные обновления делают, более отзывчивое приложение для пользователя). Но, если пользователь отправляет сообщение в стену и немедленно закрывает приложение (при выходе из системы или закрытии окна), сообщение может выйти из строя, и он не будет предупрежден.
- Мне не нравится идея того, что магазины управляют своими собственными сущностями (например, сообщениями) и ситуацией действия, вызванным для продолжения сообщения (загрузка, succesfull, failed?). Он смешивает вещи.
Итак, я работаю над этим и создаю ActionStore, чтобы управлять состоянием действий, инициируемых компонентами. Вот исходный код и здесь - живая демонстрация.
Он работает примерно так:
- Корень иерархии компонентов (контейнер в редуксе) выберет nextId нового действия и передаст его своим дочерним элементам, например, реквизитам (это уродливо).
- Детский компонент запускает действие: он сохраняет actionId для запроса в хранилище после и вызывает создателя действия.
- Создатель действия создает новое действие и возвращает функцию промежуточному программному обеспечению.
- Функция, возвращаемая из Action, создает новое Promise с вызовом API и отправляет действие типа XX_START.
- ActionStore прослушивает действие XX_START и сохраняет его.
- Детский компонент получает новое состояние и находит действие с сохраненным идентификатором и задает ему текущую ситуацию: загрузка, успешность или неудача.
Я сделал это в основном для разделения состояния "сущностей" на состояние действий, но также допускает повторные действия с одинаковой полезной нагрузкой (это может быть полезно, когда мы получаем 500 ответов, если сервер временно вниз или если пользователь потерял сигнал).
Кроме того, наличие хранилища действий позволяет легко спросить, находятся ли они в ожидании действий до выхода пользователя из системы или закрытия окна.
Примечание. Я работаю с одним веб-приложением одной страницы приложения с API-интерфейсом Rest, я не думаю, что использовать его при создании на стороне сервера
Это жизнеспособный вариант создания ActionStore или я ломаю некоторые фонды Redux/Flux? Это может положить конец возможности использования React Hot Reloading и Time travel?
Вы должны отвечать без пощады, я, вероятно, сделал кучу уродливых вещей, но я изучаю React/Redux.