0Pricing
React Academy · Aula

Tratando eventos de armazenamento entre abas

Reaja a alterações no localStorage feitas em outras abas do navegador usando o ouvinte de eventos de armazenamento.

Tratando eventos de armazenamento entre abas é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

O problema de desatualização entre abas

Quando um usuário tem seu aplicativo aberto em duas abas e atualiza um valor na aba A, a aba B ainda mostra o estado antigo. Cada aba tem seu próprio estado do React na memória, embora compartilhem o localStorage.

Sem coordenação, as abas discordam sobre o valor atual.

O evento de armazenamento é disparado em outras abas

O navegador dispara um evento storage nas outras abas da mesma origem sempre que o localStorage muda. É importante observar que ele não é disparado na aba que fez a alteração.

Esse é exatamente o sinal de que a aba B precisa para saber que a aba A atualizou algo.

Escuta com addEventListener

Em um useEffect, você chama window.addEventListener('storage', handler) e retorna uma função de limpeza que o remove. Isso inscreve o componente nas alterações entre abas.

O efeito deve ser executado uma vez na montagem, portanto uma lista de dependências vazia ou estável é adequada.

Propriedades de StorageEvent

O objeto do evento contém key (qual chave mudou), oldValue e newValue (as strings de antes e depois) e storageArea (o objeto de armazenamento afetado).

Uma chave null com valores nulos significa que o armazenamento foi completamente limpo.

Filtragem para suas chaves

O evento de armazenamento é disparado para cada chave da origem, portanto seu manipulador deve verificar event.key === yourKey antes de reagir. Ignorar chaves não relacionadas evita novas renderizações desnecessárias.

Lide também com o caso em que event.newValue é nulo, o que significa que a chave foi removida.

Atualização do estado do React a partir do evento

Quando chega uma alteração relevante, analise event.newValue e chame sua função de atualização para atualizar o estado do React. Isso sincroniza a segunda aba com a alteração feita em outro lugar.

Combinado com um gancho useLocalStorage, isso fecha o ciclo entre as abas.

A alternativa BroadcastChannel

O BroadcastChannel permite que abas da mesma origem enviem mensagens diretamente umas às outras com postMessage. Ele é mais limpo do que aproveitar eventos de armazenamento e funciona mesmo sem gravar no localStorage.

Você cria um canal por nome, publica atualizações e escuta eventos de message.

useSyncExternalStore para armazenamento

O React fornece useSyncExternalStore para assinar armazenamentos externos de forma segura em modo concorrente. Você pode conectar a função de inscrição dele ao evento storage e o instantâneo dele a uma leitura do localStorage.

Isso integra corretamente as atualizações do armazenamento externo à renderização do React.

Caso de uso: encerrar a sessão em todas as abas

Um caso clássico é encerrar a sessão em todos os lugares: quando uma aba limpa o indicador de autenticação, o evento de armazenamento nas outras abas detecta isso e as redireciona para a tela de login.

Isso impede que uma aba desatualizada continue exibindo conteúdo autenticado.

Sincronização do modo escuro entre abas

O tema é outra ótima aplicação: alternar o modo escuro em uma aba grava no localStorage, o evento de armazenamento é disparado nas outras e elas atualizam seu estado de tema para corresponder instantaneamente.

O usuário obtém uma aparência consistente, independentemente da aba para a qual mudar.

Reunindo tudo

A sincronização entre abas se resume a escutar o evento storage (ou usar BroadcastChannel), filtrar suas chaves e atualizar o estado do React a partir do novo valor.

Para inscrições robustas e seguras em modo concorrente, useSyncExternalStore é a escolha moderna.

Verificação rápida

Teste sua compreensão dos eventos entre abas.

Recapitulação

Você aprendeu que o evento storage é disparado em outras abas, como escutá-lo, filtrá-lo por chave e atualizar o estado, além de ter conhecido as alternativas BroadcastChannel e useSyncExternalStore.

Você viu casos de uso reais, como encerrar a sessão em todas as abas e sincronizar o modo escuro entre abas.

Perguntas Frequentes

A aula “Tratando eventos de armazenamento entre abas” é grátis?

Sim — o texto completo de “Tratando eventos de armazenamento entre abas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Tratando eventos de armazenamento entre abas”?

Reaja a alterações no localStorage feitas em outras abas do navegador usando o ouvinte de eventos de armazenamento. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Tratando eventos de armazenamento entre abas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Lendo e gravando no localStorage com React
  2. Sincronizando o estado com localStorage
  3. Tratando eventos de armazenamento entre abas
  4. sessionStorage, IndexedDB e escolha da API certa
← Voltar para React Academy