Библиотека idb-keyval предоставляет упрощённый интерфейс для работы с IndexedDB в браузере. Основной функционал стандартного API ограничен глобальным хранилищем, но для проектов с несколькими независимыми базами данных или объектными хранилищами используется функция createStore. Она позволяет создавать собственные экземпляры хранилища с уникальным именем базы данных и именем объекта (object store).
Синтаксис:
import { createStore } from 'idb-keyval';
const myStore = createStore(dbName, storeName);
dbName — имя базы данных (тип: string). Если база с
указанным именем не существует, она создаётся автоматически.storeName — имя объекта хранилища в базе (тип: string).
Если объектное хранилище отсутствует, оно создаётся при открытии
базы.Каждый созданный объект myStore может использоваться с
методами get, set, del,
clear, keys, update и другими
функциями idb-keyval, принимающими в качестве первого аргумента именно
этот экземпляр.
После создания кастомного хранилища его можно применять для чтения и записи данных независимо от глобального хранилища.
import { get, set } from 'idb-keyval';
const myStore = createStore('userDB', 'preferences');
// Запись значения
await set('theme', 'dark', myStore);
// Чтение значения
const theme = await get('theme', myStore);
console.log(theme); // 'dark'
Ключевые моменты:
await или
then.Функция createStore позволяет управлять не только
именами, но и версией базы данных через дополнительный параметр
version в настройках:
import { createStore } from 'idb-keyval';
const myStore = createStore('userDB', 'preferences', { version: 2 });
onupgradeneeded, что позволяет создавать новые object store
или изменять структуру существующих.В крупных приложениях часто требуется несколько независимых хранилищ. Пример:
const settingsStore = createStore('appDB', 'settings');
const cacheStore = createStore('appDB', 'cache');
await set('language', 'ru', settingsStore);
await set('homepage', { visited: true }, cacheStore);
const language = await get('language', settingsStore);
const homepageData = await get('homepage', cacheStore);
Выделенные преимущества:
clear) по
отдельному хранилищу, не затрагивая другие.Все методы idb-keyval принимают кастомное хранилище как опциональный третий аргумент. Примеры:
import { del, update } from 'idb-keyval';
// Удаление значения
await del('theme', myStore);
// Обновление значения
await update('counter', (n = 0) => n + 1, myStore);
Особенности метода update:
Кастомные хранилища через createStore делают работу с IndexedDB максимально гибкой, сохраняя простоту API idb-keyval и обеспечивая масштабируемость для сложных приложений на JavaScript.