Кто отвечает за извлечение данных с сервера в приложении 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 ответ:
Обычно мой магазин занимается выборкой данных. Делая это таким образом, убедитесь, что вся логика может управляться самим магазином, и у вас есть полный контроль над тем, когда/как/почему вы получаете данные.
Тот факт, что вы также можете иметь магазины, взаимодействующие друг с другом, также является еще одним доказательством того, почему магазины должны отвечать за обработку/извлечение данных.
Также, как описывает картина потока: "Хранилища содержат состояние приложения и логику. Их роль в чем-то похожа на модель в традиционном MVC, но они управляют состоянием многих объектов.." Имеет смысл иметь хранилища, управляющие выборкой данных из API / серверной части.