Idb-keyval — это лёгкая обёртка над IndexedDB,
обеспечивающая простой и интуитивно понятный интерфейс для работы с
хранилищем ключ-значение в браузере. Она реализует асинхронный
доступ к данным с использованием промисов, что позволяет
работать с IndexedDB без сложной схемы транзакций и обработчиков
событий.
Основная философия библиотеки — минимализм и предсказуемость: минимальный API, отсутствие лишних зависимостей и автоматическое управление транзакциями.
Для использования Idb-keyval достаточно подключить пакет через npm:
import { get, set, del, clear, keys } from 'idb-keyval';
Библиотека не требует явного создания базы данных для простых
случаев. По умолчанию она создаёт базу keyval-store с
объектным хранилищем keyval.
Для создания отдельного хранилища:
import { Store } from 'idb-keyval';
const customStore = new Store('custom-db', 'custom-store');
Store позволяет изолировать данные и управлять
несколькими хранилищами одновременно.
Метод set сохраняет значение под указанным ключом:
await set('user', { name: 'Alice', age: 30 });
Особенности:
await или цепочку .then().Для извлечения значения используется get:
const user = await get('user');
console.log(user.name); // Alice
Если ключ отсутствует, возвращается undefined.
Метод del удаляет значение по ключу:
await del('user');
Для полного очищения хранилища применяется clear:
await clear();
Метод keys возвращает массив всех ключей в
хранилище:
const allKeys = await keys();
console.log(allKeys); // ['user', 'settings', 'theme']
Это позволяет динамически управлять набором данных и реализовывать сложные операции выборки.
Создание собственного хранилища через Store расширяет
возможности библиотеки:
const themeStore = new Store('settings-db', 'theme-store');
await set('theme', 'dark', themeStore);
const theme = await get('theme', themeStore);
Таким образом, можно:
Все методы возвращают промисы. Рекомендуется оборачивать операции в
блок try/catch:
try {
await set('config', { lang: 'ru' });
const config = await get('config');
} catch (err) {
console.error('Ошибка при работе с IndexedDB:', err);
}
Это обеспечивает устойчивость к ошибкам при работе с ограниченными ресурсами браузера или нестабильными средами.
Idb-keyval поддерживает все современные браузеры,
включая мобильные.Библиотека предоставляет возможность создания асинхронных функций для батчевых операций:
const users = ['Alice', 'Bob', 'Carol'];
await Promise.all(users.map(user => set(user, { active: true })));
Это позволяет параллельно сохранять множество ключей, сохраняя минимализм API и эффективность работы.
Idb-keyval демонстрирует подход, при котором сложность управления IndexedDB скрыта за простым интерфейсом:
Библиотека идеально подходит для приложений, где требуется локальное хранение состояния или настроек, без внедрения тяжёлых ORM-слоёв и сложных схем хранения.