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
- Lendo e gravando no localStorage com React
- Sincronizando o estado com localStorage
- Tratando eventos de armazenamento entre abas
- sessionStorage, IndexedDB e escolha da API certa