2016-11-30 2 views
0

Итак, мы планируем использовать PHP-сервер с сервером Front React + Redux. Мы разрабатываем очень большое приложение, множество таблиц по всему приложению. Поскольку это будет одностраничное приложение, все данные содержатся внутри объекта хранилища.Работа с консистенцией данных в очень большом хранилище в React + Redux SPA SaaS

Итак, давайте посмотрим, насколько я настроен правильно. Мое состояние начнет почти пусто, когда я войду в приложение. Когда я посещаю страницы, мое состояние начнет заполняться. Пример: Я посещаю «фотографии» из приложения, то я закончу нагрузку некоторые из фотографий из моей БД и положить его в моем магазине:

state{ 
... 
photos: [1: {...}, 3: {...}, 17:{...}] 
... 
} 

И потом, если мне нужно фото с ид = 17, мне больше не нужно запрашивать его, я могу использовать его в своем магазине, верно? Или, может быть, я сначала беру его из магазина и попрошу асинхронно проверить, были ли изменения к нему.

Поскольку я посещаю все больше и больше страниц, у меня будет огромный объект с большим количеством элементов из разных таблиц, например. фотографии, видео, user_configurations, друзей и т. д. Как я должен работать с согласованностью данных? Если мне нужен объект, который я уже набрал 10 минут назад, должен ли я запросить его еще раз? «Здорово» иметь такой большой объект магазина?

Я планирую использовать normalizr & повторно выбрать, чтобы манипулировать моей датой внутри react-redux.

Любые мысли об этом? Хотелось бы услышать, как вы думаете, что это хороший способ справиться с ситуацией.

Заранее благодарен!

Фабиу

ответ

1

Да, нормированный Redux магазин является стандартной рекомендацией. См. Redux FAQ: Organizing Nested State, Structuring Reducers - Normalizing State Shape и Selectors and Normalization часть моего списка ссылок React/Redux для получения дополнительной информации.

Что касается кэширования данных, концептуально это не должно отличаться от любой другой клиентской установки. Хранение большого количества данных займет примерно столько же памяти, независимо от того, используете ли вы Redux, Angular, Ember, Backbone или что-то еще. Вам решать, сколько вы хотите кэшировать, и когда и как вы можете очистить кэшированные данные.

Наконец, для управления реляционными/нормализованными данными в вашем магазине Redux я рекомендую библиотеку под названием Redux-ORM. Вы должны абсолютно использовать Reselect в целом, и Normalizr хорош для нормализации данных, которые вы получили, но Redux-ORM обеспечивает полезный уровень абстракции для запроса и обновления нормализованных данных, как только он находится в магазине. Я написал пару сообщений в блогах, описывающих его использование: Redux-ORM Basics и Redux-ORM Concepts and Techniques.

+0

Ого! Спасибо, Марк! Спасибо за материал, это выглядит именно то, что мне нужно прямо сейчас. И спасибо также за предложение использовать Radux-ORM, заменит ли он normalizr и полностью отменит выбор? Я не согласен ни с одним, я окончательно взглянул на него. –

+0

Между ними есть несколько совпадений. Redux-ORM может использовать Reselect для генерации некоторых селекторов, и я использую Redux-ORM внутри некоторых селекторов Reselect. Я фактически использую Redux-ORM для синтаксического анализа и нормализации входящих данных, которые _does_ заменяют то, что вы используете для Normalizr, хотя есть пара предостережений (за мой второй пост в блоге). – markerikson

+0

Предполагая, что это ответили на вопрос, не принимая ответ? :) – markerikson

 Смежные вопросы

  • Нет связанных вопросов^_^