Чтение и запись в localStorage в React
Безопасно обращайтесь к localStorage в хуках React, обрабатывайте окружения SSR и сериализуйте сложное состояние.
«Чтение и запись в localStorage в React» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Интерфейс localStorage
localStorage — это встроенное хранилище браузера с четырьмя основными методами: setItem(key, value), getItem(key), removeItem(key) и clear(). Данные сохраняются после перезагрузки страницы и перезапуска браузера.
Хранилище находится в объекте window и ограничено источником: у каждого домена есть собственное изолированное хранилище.
Синхронный и блокирующий
Каждый вызов localStorage синхронно выполняется в основном потоке. Чтение или запись больших объёмов данных может блокировать отрисовку и заставлять интерфейс работать рывками.
Поэтому храните небольшие значения и не выполняйте запись при каждом нажатии клавиши или событии прокрутки.
Хранит только строки
localStorage может хранить только строки. Чтобы сохранить объект или массив, сначала сериализуйте его с помощью JSON.stringify(value), а затем вызовите setItem.
Если напрямую сохранить значение не строкового типа, оно будет приведено к строке, и объект превратится в бесполезную строку [object Object].
Разбор с обработкой ошибок
При чтении вызовите JSON.parse(localStorage.getItem(key)), однако разбор может завершиться ошибкой, если сохранённая строка повреждена или была записана другим источником.
Оберните разбор в try/catch и используйте значение по умолчанию, чтобы некорректная запись не привела к сбою компонента.
Проверка доступности
localStorage доступен не всегда: при серверной отрисовке объекта window не существует, а некоторые режимы приватного просмотра вызывают ошибку при записи. Проверяйте доступность хранилища.
Надёжная проверка — это try/catch, который записывает и удаляет временный ключ и возвращает ложный результат, если возникает ошибка.
Лимит ёмкости ~5 МБ
Большинство браузеров ограничивают объём localStorage примерно пятью мегабайтами для одного источника. При превышении этого объёма запись вызывает ошибку QuotaExceededError.
Поэтому localStorage подходит для небольших данных, но плохо подходит для изображений, больших наборов данных или кэшированных ответов программного интерфейса.
Подходящие данные
Подходящие кандидаты — небольшие неконфиденциальные фрагменты интерфейса и состояния пользователя: предпочтение темы, свёрнутое состояние боковой панели, последние использованные фильтры, закрытые баннеры и незавершённые черновики форм.
Это значения, которые должны сохраняться после перезагрузки, но не требуют обращения к серверу.
Неподходящие данные
Не храните секреты, такие как токены или пароли: любой скрипт на странице может прочитать localStorage, что делает его уязвимым для XSS. Также не храните большие объекты и достоверное состояние сервера.
Конфиденциальные данные аутентификации следует хранить в файлах cookie с атрибутом httpOnly, а основные данные — на сервере.
localStorage и sessionStorage
Оба хранилища используют один и тот же программный интерфейс, но sessionStorage очищается при закрытии вкладки и не является общим для разных вкладок. localStorage сохраняет данные бессрочно и является общим для всех вкладок одного источника.
Выбирайте sessionStorage для краткосрочных данных, относящихся к одной вкладке, а localStorage — для постоянных предпочтений.
Сравнение с файлами cookie и IndexedDB
Файлы cookie имеют небольшой объём и отправляются с каждым HTTP-запросом, поэтому подходят для аутентификации, но расходуют пропускную способность при хранении обычных данных. IndexedDB — это асинхронная база данных для больших структурированных данных, значительно превышающих лимит в 5 МБ.
Выбирайте файлы cookie для аутентификации, которую должен читать сервер, localStorage — для небольших настроек клиента, а IndexedDB — для больших или сложных данных.
Простая схема чтения и записи
Минимальный вспомогательный код записывает данные с помощью localStorage.setItem(key, JSON.stringify(value)), а считывает их с помощью защищённого от ошибок блока try/catch вокруг JSON.parse(localStorage.getItem(key)), возвращая значение по умолчанию при сбое.
Эта небольшая обёртка объединяет сериализацию и обработку ошибок в одном месте.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете типы данных localStorage.
Итоги
Вы изучили программный интерфейс localStorage, узнали, что он синхронный, работает только со строками и ограничен объёмом около 5 МБ, а также научились безопасно разбирать данные и проверять доступность хранилища в SSR и приватном режиме.
Кроме того, Вы сравнили его с sessionStorage, файлами cookie и IndexedDB, чтобы выбирать подходящее хранилище.
Часто задаваемые вопросы
Урок «Чтение и запись в localStorage в React» бесплатный?
Да — полный текст урока «Чтение и запись в localStorage в React» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение и запись в localStorage в React»?
Безопасно обращайтесь к localStorage в хуках React, обрабатывайте окружения SSR и сериализуйте сложное состояние. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Чтение и запись в localStorage в React»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение и запись в localStorage в React
- Синхронизация состояния с localStorage
- Обработка событий хранилища между вкладками
- sessionStorage, IndexedDB и выбор подходящего API