Когда что использовать

Выбор способа локального хранения в React Native зависит от типа и объёма данных, а также от сценария использования.

AsyncStorage применяется, когда нужно сохранить небольшие структурированные данные в формате «ключ-значение». Типичные примеры:

  • Токен авторизации
  • Выбранная тема интерфейса («светлая»/«тёмная»)
  • Флаг завершённого онбординга
  • Последнее обновление данных
  • Настройки пользователя (язык, единицы измерения)

Преимущества: простота API, быстрый доступ, автоматическая интеграция с нативными системами хранения. Недостатки: ограничение по объёму (~6 МБ), хранение только строк, отсутствие запросов.

Файловая система (react-native-fs) используется для работы с бинарными или объёмными данными, которые неудобно или невозможно представить как строку JSON. Примеры:

  • Кэширование изображений (аватары, фото из ленты)
  • Сохранение загруженных документов (PDF, CSV)
  • Экспорт данных приложения в файл
  • Временные файлы для офлайн-обработки

Преимущества: прямой доступ к файлам, поддержка потоковой записи, работа с большими объёмами. Недостатки: сложность управления путями, необходимость контроля за очисткой кэша, отсутствие структурированного поиска.

Базы данных (SQLite, Realm, WatermelonDB) — это следующий уровень, который применяется, когда:

  • Есть множество связанных записей (например, список задач с подзадачами)
  • Требуются фильтрация, сортировка, поиск по полям
  • Необходима поддержка транзакций
  • Данные регулярно обновляются и синхронизируются с сервером

Эти решения выходят за рамки текущей темы, но важно понимать, что AsyncStorage и файловая система — это не замена базе данных, а инструменты для конкретных задач: конфигурации и медиаконтента соответственно.

Правило выбора:

  • Если данные можно выразить одной строкой или небольшим JSON-объектом — используйте AsyncStorage.
  • Если данные — это файл (изображение, документ, аудио) — используйте react-native-fs.
  • Если у вас таблицы, связи и запросы — рассматривайте SQLite или другие локальные БД.