0Pricing
React Academy · Урок

Обработка событий хранилища между вкладками

Реагируйте на изменения localStorage в других вкладках браузера с помощью обработчика событий хранилища.

«Обработка событий хранилища между вкладками» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Проблема устаревших данных между вкладками

Если пользователь открыл приложение в двух вкладках и обновил значение во вкладке A, во вкладке B по-прежнему отображается старое состояние. У каждой вкладки есть собственное состояние React в памяти, хотя localStorage у них общий.

Без согласования вкладки имеют разные представления о текущем значении.

Событие хранилища срабатывает в других вкладках

Браузер отправляет событие storage в другие вкладки одного источника при каждом изменении localStorage. Важно, что во вкладке, где произошло изменение, это событие не срабатывает.

Именно этот сигнал нужен вкладке B, чтобы узнать об изменении, выполненном во вкладке A.

Прослушивание с помощью addEventListener

Внутри useEffect вызовите window.addEventListener('storage', handler) и верните функцию очистки, которая удаляет обработчик. Так компонент подписывается на изменения между вкладками.

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

Свойства StorageEvent

Объект события содержит key (какой ключ изменился), oldValue и newValue (строки до и после изменения), а также storageArea (затронутое хранилище).

Ключ null со значениями null означает, что всё хранилище было очищено.

Фильтрация по нужным ключам

Событие хранилища срабатывает для каждого ключа источника, поэтому обработчик должен проверять event.key === yourKey, прежде чем реагировать. Игнорирование несвязанных ключей предотвращает ненужные повторные рендеринги.

Также обработайте случай, когда event.newValue равен null: это означает, что ключ был удалён.

Обновление состояния React по событию

Получив соответствующее изменение, разберите event.newValue и вызовите функцию установки, чтобы обновить состояние React. Так вторая вкладка синхронизируется с изменением, выполненным в другом месте.

Вместе с хуком useLocalStorage это замыкает цикл синхронизации между вкладками.

Альтернатива BroadcastChannel

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

Создайте канал по имени, отправляйте обновления и прослушивайте события message.

useSyncExternalStore для хранилища

React предоставляет useSyncExternalStore для подписки на внешние хранилища безопасным для конкурентного выполнения способом. Его функцию подписки можно связать с событием storage, а снимок состояния — с чтением localStorage.

Так обновления внешнего хранилища корректно интегрируются с отрисовкой React.

Сценарий выхода из аккаунта на всех вкладках

Классический сценарий — выйти из аккаунта везде: когда одна вкладка очищает флаг аутентификации, событие хранилища в других вкладках обнаруживает это и перенаправляет их на экран входа.

Это не позволяет устаревшей вкладке продолжать показывать содержимое для вошедшего пользователя.

Синхронизация тёмного режима между вкладками

Тема — ещё один подходящий пример: переключение тёмного режима в одной вкладке записывает данные в localStorage, событие хранилища срабатывает в остальных, и они мгновенно обновляют состояние темы.

Пользователь видит единообразное оформление независимо от того, на какую вкладку он переключается.

Собираем всё вместе

Синхронизация между вкладками сводится к прослушиванию события storage или использованию BroadcastChannel, фильтрации по нужным ключам и обновлению состояния React на основе нового значения.

Для надёжных подписок, безопасных при конкурентном выполнении, современным вариантом является useSyncExternalStore.

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете события между вкладками.

Итоги

Вы узнали, что событие storage срабатывает в других вкладках, научились прослушивать его, фильтровать события по ключу и обновлять состояние, а также познакомились с альтернативами BroadcastChannel и useSyncExternalStore.

Вы рассмотрели практические сценарии, такие как выход из аккаунта на всех вкладках и синхронизация тёмного режима между вкладками.

Часто задаваемые вопросы

Урок «Обработка событий хранилища между вкладками» бесплатный?

Да — полный текст урока «Обработка событий хранилища между вкладками» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Обработка событий хранилища между вкладками»?

Реагируйте на изменения localStorage в других вкладках браузера с помощью обработчика событий хранилища. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Обработка событий хранилища между вкладками»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение и запись в localStorage в React
  2. Синхронизация состояния с localStorage
  3. Обработка событий хранилища между вкладками
  4. sessionStorage, IndexedDB и выбор подходящего API
← Назад к React Academy