Задать вопрос

Где хранить большой массив объектов в реакт приложении?

Всем добрый день.

Имеется большой массив объектов, хранящийся в Firestore (2000 строк js кода). Приложение реакт, в частности, компоненты и их внешний вид зависят от этих данных. Пока что, храню этот массив в редукс, и при запуске приложения в useEffect проверяю, если данные с Firestor'a подтянулись, то экшеном делаю назначение редукс свойства.

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

Заранее спасибо
  • Вопрос задан
  • 1093 просмотра
Подписаться 8 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Zraza
@Zraza
Помог ответ? Отметь решением!
Мой взгляд, на истину не претендую:

Я сторонник того, что на клиенте вообще не стоит хранить большие объемы данных. Т.е. запрашивает только те, которые нам нужны для работы/отображения в конкретный момент. Все фильтры/сортировка/пагинация на стороне сервера. Понятно, что это не всегда возможно, поэтому идем дальше...

В хранении большого объема данных в редаксе не вижу ничего плохого, если они редко меняются. Если часто - неприятно, нужно поддерживать иммутабельность, затраты на garbage collector.
Плюсы - быстрый доступ до данных, т.к. хранятся они в памяти.
Минусы - поддержка иммутабельности и затраты на память.

Если уж отходить от редакса - можно воспользоваться каким-то стором на основе мутабельных объектов, например mobx.

Если всё это держать в памяти не хочется - то действительно можно взять IndexedDB. Хранится на диске, между перезагрузками сохраняется, асинхронное апи, есть индексы по полям. Нужно учесть, что на браузерах в режиме инкогнито может не работать или работать ограниченно (для предотвращения отслеживания).

Ну и, конечно, вопрос в объеме данных. Просто 2к объектов - не то, чтобы сильно много. Вопрос, насколько тяжелых объектов.
Ответ написан
Ваш ответ на вопрос

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

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