Assinando APIs do Navegador
Crie hooks que assinem matchMedia, navigator.onLine, o histórico da janela e localStorage usando useSyncExternalStore.
Assinando APIs do Navegador é 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.
Inscrevendo-se em matchMedia
As consultas de mídia do navegador são um armazenamento externo perfeito. Você pode se inscrever em uma consulta matchMedia para o modo escuro ou para um ponto de interrupção e renderizar novamente sempre que o estado de correspondência mudar.
A função de inscrição adiciona um ouvinte de mudanças ao MediaQueryList, e getSnapshot retorna o valor booleano atual que indica a correspondência, oferecendo acesso reativo às condições responsivas.
Um gancho useMediaQuery
Encapsular essa lógica em um gancho useMediaQuery permite que os componentes perguntem se uma consulta corresponde com uma única chamada. O gancho cria uma função de inscrição estável e um getSnapshot estável com base em uma determinada cadeia de consulta.
Isso produz um primitivo limpo e reutilizável para comportamento responsivo, que permanece consistente durante a renderização concorrente graças a useSyncExternalStore.
Status de navigator.onLine
O navegador expõe eventos de conexão e desconexão, além de navigator.onLine. Inscrever-se nesses eventos e ler a propriedade fornece um status de conectividade atualizado dentro do React.
getSnapshot retorna navigator.onLine, e a função de inscrição adiciona ouvintes para os eventos de conexão e desconexão, fazendo o componente ser atualizado à medida que a conectividade muda.
Um gancho useOnlineStatus
Agrupar isso em um gancho useOnlineStatus permite que qualquer componente exiba banners de desconexão ou desative ações quando a rede cair. A documentação oficial do React usa exatamente este exemplo para demonstrar o gancho.
É um caso pequeno, mas ilustrativo, em que um sinal externo do navegador se transforma claramente em um elemento de estado reativo.
Inscrevendo-se em window.location
Você pode se inscrever em mudanças de navegação ouvindo o evento de alteração do histórico e lendo window.location em getSnapshot. Isso sustenta roteadores personalizados simples criados com base na API de histórico.
Como pushState não emite o evento de alteração do histórico, os roteadores personalizados geralmente disparam seu próprio evento para que o instantâneo também seja atualizado durante a navegação programática.
localStorage entre abas por meio do evento de armazenamento
O evento de armazenamento é disparado em outras abas quando localStorage muda, o que faz dele um armazenamento externo ao qual você pode se inscrever. getSnapshot lê o valor atual, e a função de inscrição ouve os eventos de armazenamento.
Isso permite a sincronização entre abas, na qual atualizar um valor em uma aba atualiza reativamente os componentes em outra.
deviceOrientation
O evento de orientação do dispositivo informa a inclinação física de um dispositivo. Inscrever-se nele e ler os ângulos mais recentes em getSnapshot transforma dados de movimento em estado reativo.
Isso é útil para efeitos de paralaxe ou visualizações interativas que respondem à maneira como um telefone é segurado.
Um encapsulador de IntersectionObserver
IntersectionObserver informa quando um elemento entra ou sai da área de visualização. Você pode encapsulá-lo para que a função de inscrição crie o observador e getSnapshot retorne o valor mais recente de isIntersecting.
Isso fornece um sinalizador reativo isVisible para carregar imagens sob demanda, disparar animações ou implementar marcadores de rolagem infinita.
ResizeObserver para o tamanho de elementos
ResizeObserver informa mudanças no tamanho dos elementos. Encapsulá-lo permite que a função de inscrição observe um elemento e que getSnapshot retorne suas dimensões atuais, fazendo os componentes reagirem precisamente às mudanças de layout.
Isso é mais eficiente e preciso do que ouvir o redimensionamento da janela quando você se importa com um elemento específico, e não com toda a área de visualização.
Compondo em useWindowSize
Você pode combinar o evento de redimensionamento com o gancho para criar um useWindowSize que retorne a largura e a altura atuais. A função de inscrição adiciona um ouvinte de redimensionamento, e getSnapshot lê as dimensões da janela.
Lembre-se de retornar um instantâneo estável, armazenando em cache o objeto de tamanho para que dimensões inalteradas não causem novas renderizações e mantenham a composição eficiente.
Verificação rápida: implementação de useMediaQuery
Analise como um gancho useMediaQuery usa o gancho de armazenamento.
Recapitulação: inscrevendo-se em APIs do navegador
Muitas APIs do navegador são armazenamentos externos que você pode conectar com useSyncExternalStore: matchMedia para pontos de interrupção, navigator.onLine para conectividade, localização e armazenamento para navegação e sincronização entre abas, além de observadores de orientação, interseção e redimensionamento.
Todas seguem o mesmo formato: uma função de inscrição que adiciona e remove ouvintes e um getSnapshot estável. Componha-os em ganchos como useMediaQuery, useOnlineStatus e useWindowSize.
Perguntas Frequentes
A aula “Assinando APIs do Navegador” é grátis?
Sim — o texto completo de “Assinando APIs do Navegador” é 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 “Assinando APIs do Navegador”?
Crie hooks que assinem matchMedia, navigator.onLine, o histórico da janela e localStorage usando useSyncExternalStore. 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 “Assinando APIs do Navegador”?
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
- O Problema das Assinaturas em Armazenamentos Externos
- API e Parâmetros de useSyncExternalStore
- Assinando APIs do Navegador
- Construindo um Armazenamento Personalizado com useSyncExternalStore