AsyncStorage
AsyncStorage — это асинхронное хранилище ключ-значение, рекомендованное для небольших объемов данных: настроек, токенов, кэша.
▸Установка
1npm install @react-native-async-storage/async-storage
▸Использование
1import AsyncStorage from '@react-native-async-storage/async-storage';23// Сохранение4await AsyncStorage.setItem('user_token', 'abc123');5await AsyncStorage.setItem('user_profile', JSON.stringify({6 name: 'John',7 email: 'john@example.com',8}));910// Чтение11const token = await AsyncStorage.getItem('user_token');12const profile = JSON.parse(await AsyncStorage.getItem('user_profile'));1314// Удаление15await AsyncStorage.removeItem('user_token');1617// Очистка всех данных18await AsyncStorage.clear();
▸Ограничения
MMKV
MMKV — это высокопроизводительное хранилище от WeChat, работающее синхронно и поддерживающее шифрование.
▸Установка
1npm install react-native-mmkv
▸Использование
1import { MMKV } from 'react-native-mmkv';23const storage = new MMKV();45// Сохранение6storage.set('user.name', 'John');7storage.set('user.age', 30);8storage.set('user.profile', JSON.stringify({ email: 'john@example.com' }));910// Чтение11const name = storage.getString('user.name'); // 'John'12const age = storage.getNumber('user.age'); // 3013const profile = JSON.parse(storage.getString('user.profile'));1415// Удаление16storage.delete('user.name');1718// Проверка наличия ключа19const hasKey = storage.contains('user.name'); // true/false
▸Преимущества MMKV
SQLite
SQLiteпредоставляет реляционную базу данных для структурированных данных с поддержкой SQL-запросов.
▸Установка
1npm install react-native-sqlite-storage
▸Создание таблицы
1import SQLite from 'react-native-sqlite-storage';23const db = await SQLite.openDatabase({ name: 'app.db' });45// Создание таблицы6await db.executeSql(`7 CREATE TABLE IF NOT EXISTS users (8 id INTEGER PRIMARY KEY AUTOINCREMENT,9 name TEXT NOT NULL,10 email TEXT UNIQUE,11 created_at DATETIME DEFAULT CURRENT_TIMESTAMP12 )13`);
▸CRUD операции
1// INSERT2await db.executeSql(3 'INSERT INTO users (name, email) VALUES (?, ?)',4 ['John', 'john@example.com']5);67// SELECT8const [results] = await db.executeSql('SELECT * FROM users');9const users = results.rows.raw();1011// UPDATE12await db.executeSql(13 'UPDATE users SET name = ? WHERE id = ?',14 ['Jane', 1]15);1617// DELETE18await db.executeSql('DELETE FROM users WHERE id = ?', [1]);
Когда что использовать
Миграции и версионирование
При обновлении схемы SQLite необходимо выполнять миграции:
1await db.executeSql(`2 CREATE TABLE IF NOT EXISTS migrations (3 version INTEGER PRIMARY KEY,4 applied_at DATETIME DEFAULT CURRENT_TIMESTAMP5 )6`);78const currentVersion = await getCurrentVersion(db);9if (currentVersion < 2) {10 await db.executeSql('ALTER TABLE users ADD COLUMN avatar TEXT');11 await db.executeSql('INSERT INTO migrations (version) VALUES (2)');12}
Заключение
Выбор хранилища зависит от типа данных и требований к производительности. AsyncStorage подходит для простых случаев, MMKV — для производительных сценариев, SQLite — для структурированных данных. В реальных проектах часто комбинируют несколько решений.