Кто отвечает за извлечение данных с сервера в приложении flux с кэшированием?


В примере приложения flux webchat и в диаграмме README создается впечатление, что создатель действия должен получить данные с сервера.

поток поток данных

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

Я думаю, что лучше получать дернормализованные данные, когда это возможно, чтобы минимизировать вызовы xhr. Если хранилище денормализовано, например MessageStore будет содержит все данные, необходимые для вывода сообщений. Каждое сообщение выглядит как

{
 "id": 42
 "message": "Héllo, you tried reactjs-flux too. Awesome isn't it!"
 "user": {id: 1337, username: "amirouche", bio: "maker"},
 "likes": [{id: 2600, username: "NinjaTurtle"}, {id: 2601, username: "Peer"}
}

Магазин может нести ответственность (через события?) для обновления магазина пользователей с частичными моделями пользователей.

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

В этой ситуации мне кажется, что создатель действия полезен только для отправки полезной нагрузки ie. это бесполезно.

Что вы думаете?

1 7

1 ответ:

Обычно мой магазин занимается выборкой данных. Делая это таким образом, убедитесь, что вся логика может управляться самим магазином, и у вас есть полный контроль над тем, когда/как/почему вы получаете данные.

Тот факт, что вы также можете иметь магазины, взаимодействующие друг с другом, также является еще одним доказательством того, почему магазины должны отвечать за обработку/извлечение данных.

Также, как описывает картина потока: "Хранилища содержат состояние приложения и логику. Их роль в чем-то похожа на модель в традиционном MVC, но они управляют состоянием многих объектов.." Имеет смысл иметь хранилища, управляющие выборкой данных из API / серверной части.