Настройка AsyncStorage в React Native-приложении
AsyncStorage — это простейшее key-value хранилище для React Native. Асинхронное, незашифрованное, хранит строки. Подходит для пользовательских настроек, флагов онбординга, кэша лёгких данных. Не подходит для токенов авторизации (нет шифрования), больших объёмов данных, сложных запросов.
Установка
Начиная с React Native 0.59 AsyncStorage вынесен из core в отдельный пакет:
npm install @react-native-async-storage/async-storage
Для iOS: cd ios && pod install. Для Android линковка автоматическая.
Базовое использование
import AsyncStorage from '@react-native-async-storage/async-storage';
// Запись
await AsyncStorage.setItem('onboarding_complete', 'true');
// Чтение
const value = await AsyncStorage.getItem('onboarding_complete');
// Объекты — только через JSON
await AsyncStorage.setItem('user_prefs', JSON.stringify({ theme: 'dark', lang: 'ru' }));
const prefs = JSON.parse(await AsyncStorage.getItem('user_prefs') ?? '{}');
// Удаление
await AsyncStorage.removeItem('onboarding_complete');
// Batch-операции
await AsyncStorage.multiSet([
['key1', 'value1'],
['key2', 'value2'],
]);
Лимит на Android. По умолчанию AsyncStorage на Android ограничен 6 МБ. При превышении — Database size exceeded the quota error. Увеличить лимит можно через AndroidConfig в android/app/src/main/java/.../MainApplication.java:
new ReactNativeHost(this) {
@Override
protected List<ReactPackage> getPackages() {
// ...
}
}
Или задать через AsyncStorageExtraConfig.setMaxSizeConfig в MainApplication. Если нужно хранить больше — используйте react-native-mmkv (быстрее и без лимитов) или SQLite через react-native-quick-sqlite.
Обёртка для типобезопасности
Прямые вызовы getItem/setItem с JSON-парсингом разбросаны по коду — плохая практика. Оборачиваем в типизированный сервис:
const StorageService = {
async get<T>(key: string): Promise<T | null> {
const raw = await AsyncStorage.getItem(key);
return raw ? (JSON.parse(raw) as T) : null;
},
async set<T>(key: string, value: T): Promise<void> {
await AsyncStorage.setItem(key, JSON.stringify(value));
},
async remove(key: string): Promise<void> {
await AsyncStorage.removeItem(key);
},
};
Что не хранить в AsyncStorage
Токены авторизации — используйте react-native-keychain или expo-secure-store. Они хранят данные в iOS Keychain и Android Keystore — зашифровано, защищено биометрией.
Сроки
Установка и базовая настройка: 2–4 часа. С типизированным сервисом и интеграцией в Redux Persist или Zustand: 4–8 часов. Стоимость рассчитывается индивидуально.







