Как организовать подгрузку данных по api по мере необходимости?

Инструментальный вопрос от новичка.

Предположим, что необходимо написать большое react-приложение вроде какой-нибудь CRM-системы.
Приложение будет работать с массой связанных между собой сущностей, рассмотрим простой пример Клиент + Обращение.

Пользователь открывает в браузере страницу списка обращений, в этот момент приложение отправляет запрос к api, получает список, кладет в store, всё как обычно.
Однако, пэйлоад каждого обращения в ответе api содержит только userId автора обращения, поэтому нам нужно дополнительно запросить у api информацию о пользователе(-ях).

Но не каждый же раз запрашивать одних и тех же пользователей? Надо класть их в store и по необходимости смотреть, есть ли они там и если есть брать от туда, если нет - запрашивать.
Но как понять, запрашивался ли конкретный юзер ранее? Как при отсутствии юзера в store понять, что он запрашивался ранее, но такого юзера попросту нет, поэтому его нет в store?

Если юзер заходит на страницу просмотра конкретного обращения, приложение так же должно понять, запрашивать ли у api список комментариев, авторов комментариев, список категорий, возможных статусов и т. п. Пользователь уже мог ранее посещать страницы с другими обращениями и, вероятно, категории уже подгружены. Или не подгружены и надо их запросить? В store могут лежать 100500 комментариев, но как понять есть ли там комментарии нужного обращения? Запрашивались они ранее?

Ну вы поняли.

Мой вопрос не про архитектуру, не надо предлагать хранить где-то историю загруженных ранее данных. Такой велосипед я уже написал. Может существуют гибкие и удобные инструменты для этого?
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
@abberati
frontend-разработчик
Есть удобный инструмент, который требует настройки, разработки и поддержки на клиенте и на сервере — GraphQL.

Если одним только клиентом, то на redux-saga можно наваять красивый и небольшой велосипедик.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы