Когда-то давно рассказывал про интеграцию стриминга и deferred загрузки данных в Tramvai - https://t.me/super_oleg_dev/136
У этого механизма была проблема:
Все пользователи обычно заводят сторы для данных, и обновляют их в Actions после загрузки данных.
Но, если экшен больше не блокирует ответ пользователю, значит initial state мы уже отправили на клиент, и dispatch(event) после завершения запроса к API работает впустую.
При переходе на Deferred Actions пользователям приходилось рефакторить экшены, делать дополнительные client-only экшены с синхронизацией стейта с deferred данными из стрима.
Выглядит страшно - https://tramvai.dev/docs/features/data-fetching/streaming-data/#manual-synchronization-alternative
И наконец-то мы развили эту идею!
Я называю это следуя моде state-over-the-wire 😂
Принцип работы очень простой:
- если экшен deferred
- и первый ответ пользователю уже ушел
- тогда dispatch(event) пушит событие и данные в стрим ответа, как script в HTML
- на клиенте же, мы после гидрации начинаем обработку этих событий и автоматически обновляем сторы
Таким образом все по канонам (похожим образом в стриме разметку например присылает React), и позволяет получить все плюшки от раннего не блокирующего ответ запроса, вообще без рефакторинга кодовой базы.
Коллеги, берегитесь, будем очень активно продавать 🙈
Post #236
633