Примитивы: строки, числа, булевы значения

Библиотека Idb-keyval предоставляет простой и удобный интерфейс для работы с IndexedDB в браузере, скрывая сложность асинхронных транзакций и схем базы данных. Она идеально подходит для хранения примитивных типов данных, таких как строки, числа и булевы значения, обеспечивая быстрый доступ и минимальное количество кода.

Все операции в Idb-keyval асинхронные и возвращают Promise, что позволяет использовать async/await для последовательного и чистого кода.

import { get, set, del, clear, keys } from 'idb-keyval';

Хранение строк

Строки — один из самых распространённых типов данных для локального хранения. В Idb-keyval строка может быть сохранена под уникальным ключом и считана с использованием простых функций set и get.

await set('username', 'alex');
const username = await get('username');
console.log(username); // 'alex'
  • Ключ может быть любой примитивный тип (чаще всего строка).
  • Значение — строка. Можно хранить как короткие строки, так и большие текстовые данные.
  • Строки сохраняются в формате UTF-16, что позволяет корректно работать с Unicode.

Хранение чисел

Числовые значения также поддерживаются напрямую. Это может быть полезно для счетчиков, рейтингов или временных меток.

await set('highScore', 2500);
const highScore = await get('highScore');
console.log(highScore); // 2500

Особенности работы с числами:

  • Все числа хранятся как Number, поддерживаются целые и дробные значения.
  • Можно хранить положительные, отрицательные значения и 0.
  • Для операций, зависящих от предыдущего значения, удобно использовать get с последующим set.
const currentCount = await get('visits') || 0;
await set('visits', currentCount + 1);

Хранение булевых значений

Булевы значения (true/false) легко сохраняются и извлекаются, что позволяет хранить флаги, переключатели или состояния интерфейса.

await set('darkMode', true);
const darkMode = await get('darkMode');
console.log(darkMode); // true

Особенности:

  • Булевы значения напрямую сохраняются без преобразования.
  • Отлично подходят для состояния чекбоксов, разрешений или флагов конфигурации.
  • Часто комбинируются с числами или строками для реализации условной логики.

Удаление и очистка данных

Для управления хранилищем примитивов используются функции del и clear.

await del('username'); // удаляет только ключ 'username'
await clear(); // очищает всё хранилище
  • del(key) удаляет конкретное значение по ключу.
  • clear() очищает полностью все пары ключ-значение, что полезно для сброса состояния приложения.

Перечисление ключей

Функция keys() возвращает массив всех ключей, что позволяет работать с набором данных динамически.

await set('a', 1);
await set('b', 2);
const allKeys = await keys();
console.log(allKeys); // ['a', 'b']
  • Полезно для обхода всех сохранённых значений.
  • Можно комбинировать с get для выборочной загрузки данных.

Рекомендации по использованию примитивов

  • Строки — хранить имена, тексты и идентификаторы.
  • Числа — хранить счётчики, рейтинги и метки времени.
  • Булевы значения — хранить состояния, флаги и переключатели.

Idb-keyval обеспечивает прозрачное хранение примитивов без необходимости сериализации вручную. Преимущество библиотеки в том, что она автоматически управляет транзакциями и поддерживает стандартные браузеры, что делает работу с IndexedDB максимально простой и предсказуемой.


Пример комплексного использования

await set('username', 'alex');
await set('highScore', 5000);
await set('darkMode', false);

const username = await get('username'); // 'alex'
const highScore = await get('highScore'); // 5000
const darkMode = await get('darkMode'); // false

if (!darkMode) {
    await set('darkMode', true);
}

const keysList = await keys(); // ['username', 'highScore', 'darkMode']

Этот пример демонстрирует хранение и изменение строк, чисел и булевых значений в одном хранилище, показывая гибкость Idb-keyval для примитивов.