Eu tenho um componente React, que inclui o sinalizador de disponibilidade da conectividade com a Internet. Os elementos da interface do usuário precisam ser alterados dinamicamente de acordo com o estado em tempo real. Além disso, as funções se comportam de maneira diferente com a alteração do sinalizador.
Minha implementação atual pesquisa a API remota usando o Axios a cada segundo, usando o intervalo e o estado das atualizações de acordo. Estou procurando uma maneira mais granular e eficiente de executar esta tarefa para remover o erro de estado de 1 segundo com o custo computacional mínimo. Considerado online se e somente se o dispositivo tiver uma conexão externa à Internet
Implementação atual:
class Container extends Component {
constructor(props) {
super(props)
this.state = {
isOnline: false
};
this.webAPI = new WebAPI(); //Axios wrapper
}
componentDidMount() {
setInterval(() => {
this.webAPI.poll(success => this.setState({ isOnline: success });
}, 1000);
}
render() {
return <ChildComponent isOnline={this.state.isOnline} />;
}
}
Editado:
Procurando uma solução capaz de detectar conectividade externa à Internet. O dispositivo pode se conectar a uma LAN que não possui uma conexão externa. Portanto, é considerado offline. Considera on-line se e somente se o dispositivo tiver acesso a recursos externos da Internet.
fonte
Respostas:
Método 1: Usando a API do navegador herdado -
Navigator.onLine
Retorna o status online do navegador. A propriedade retorna um valor booleano, com verdadeiro significado online e falso significado offline. A propriedade envia atualizações sempre que a capacidade do navegador de se conectar à rede mudar. A atualização ocorre quando o usuário segue os links ou quando um script solicita uma página remota. Por exemplo, a propriedade deve retornar false quando os usuários clicarem em links logo após perderem a conexão com a Internet.
Você pode adicioná-lo ao seu ciclo de vida do componente:
No entanto, acho que não é isso que você deseja, você queria um validador de conexão em tempo real .
Método 2: Verificando a conexão à Internet usando-o
A única confirmação sólida que você pode obter se a conectividade externa à Internet estiver funcionando é usando-a. A questão é: qual servidor você deve ligar para minimizar o custo?
Existem muitas soluções na Internet para isso, qualquer ponto de extremidade que responda com um status 204 rápido é perfeito, por exemplo:
IMO, se você estiver executando este aplicativo React em um servidor, faz mais sentido ligar para o seu próprio servidor, você pode chamar uma solicitação para carregar o seu
/favicon.ico
para verificar a conexão.Essa idéia (de chamar o seu próprio servidor) foi implementada por muitas bibliotecas, como
Offline
,is-reachable
, e é amplamente utilizado em toda a comunidade. Você pode usá-los se não quiser escrever tudo sozinho. (Pessoalmente, gosto do pacote NPMis-reachable
por ser simples.)Exemplo:
Acredito que o que você tem atualmente já está bom, apenas verifique se ele está chamando o endpoint correto.
Perguntas SO semelhantes:
fonte
Você pode usar https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event
e https://developer.mozilla.org/en-US/docs/Web/API/Window/online_event para verificar quando você está online novamente
fonte
Configurar um gancho personalizado
Configure um gancho com os eventos online e offline. atualize um estado e retorne-o. Dessa forma, você pode usá-lo em qualquer lugar do seu aplicativo com uma importação. Certifique-se de limpar com a função de retorno. Caso contrário, você adicionará cada vez mais ouvintes de eventos sempre que um componente usando o gancho for montado.
Para usar isso, importe o gancho acima e chame-o assim.
fonte
Você pode criar um componente para compartilhar entre todos os subcomponentes
usava:
fonte