Когда что использовать
Выбор способа локального хранения в React Native зависит от типа и объёма данных, а также от сценария использования.
AsyncStorage применяется, когда нужно сохранить небольшие структурированные данные в формате «ключ-значение». Типичные примеры:
- Токен авторизации
- Выбранная тема интерфейса («светлая»/«тёмная»)
- Флаг завершённого онбординга
- Последнее обновление данных
- Настройки пользователя (язык, единицы измерения)
Преимущества: простота API, быстрый доступ, автоматическая интеграция с нативными системами хранения. Недостатки: ограничение по объёму (~6 МБ), хранение только строк, отсутствие запросов.
Файловая система (react-native-fs) используется для работы с бинарными или объёмными данными, которые неудобно или невозможно представить как строку JSON. Примеры:
- Кэширование изображений (аватары, фото из ленты)
- Сохранение загруженных документов (PDF, CSV)
- Экспорт данных приложения в файл
- Временные файлы для офлайн-обработки
Преимущества: прямой доступ к файлам, поддержка потоковой записи, работа с большими объёмами. Недостатки: сложность управления путями, необходимость контроля за очисткой кэша, отсутствие структурированного поиска.
Базы данных (SQLite, Realm, WatermelonDB) — это следующий уровень, который применяется, когда:
- Есть множество связанных записей (например, список задач с подзадачами)
- Требуются фильтрация, сортировка, поиск по полям
- Необходима поддержка транзакций
- Данные регулярно обновляются и синхронизируются с сервером
Эти решения выходят за рамки текущей темы, но важно понимать, что AsyncStorage и файловая система — это не замена базе данных, а инструменты для конкретных задач: конфигурации и медиаконтента соответственно.
Правило выбора:
- Если данные можно выразить одной строкой или небольшим JSON-объектом — используйте AsyncStorage.
- Если данные — это файл (изображение, документ, аудио) — используйте react-native-fs.
- Если у вас таблицы, связи и запросы — рассматривайте SQLite или другие локальные БД.