Tengo un componente React, que incluye el indicador de disponibilidad de la conectividad a Internet. Los elementos de la interfaz de usuario deben cambiarse dinámicamente según el estado en tiempo real. Además, las funciones se comportan de manera diferente con el cambio de bandera.
Mi implementación actual sondea API remota usando Axios en cada segundo usando intervalos y actualiza el estado en consecuencia. Estoy buscando una forma más granular y eficiente de hacer esta tarea para eliminar el error de estado de 1 segundo con el mínimo costo computacional. Considerado en línea si y solo si el dispositivo tiene una conexión a Internet externa
Implementación actual:
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:
Buscando una solución capaz de detectar conectividad externa a Internet. El dispositivo puede conectarse a una LAN que no tiene una conexión externa. Por lo tanto, se considera fuera de línea. Considera en línea si y solo si el dispositivo tiene acceso a recursos externos de Internet.
fuente
Respuestas:
Método uno: Uso de la API de navegador heredada -
Navigator.onLine
Devuelve el estado en línea del navegador. La propiedad devuelve un valor booleano, con verdadero significado en línea y falso significado sin conexión. La propiedad envía actualizaciones cada vez que cambia la capacidad del navegador para conectarse a la red. La actualización se produce cuando el usuario sigue enlaces o cuando un script solicita una página remota. Por ejemplo, la propiedad debería devolver false cuando los usuarios hacen clic en los enlaces poco después de perder la conexión a Internet.
Puede agregarlo al ciclo de vida de su componente:
Sin embargo, creo que esto no es lo que quieres, querías un validador de conexión en tiempo real .
Método dos: verificar la conexión a Internet usándolo
La única confirmación sólida que puede obtener si la conectividad a Internet externa funciona es usándola. La pregunta es a qué servidor debe llamar para minimizar el costo.
Hay muchas soluciones en Internet para esto, cualquier punto final que responda con un estado 204 rápido es perfecto, por ejemplo:
OMI, si está ejecutando esta aplicación React en un servidor, tiene más sentido llamar a su propio servidor, puede llamar a una solicitud para cargar su
/favicon.ico
para verificar la conexión.Esta idea (de llamar a su propio servidor) ha sido implementado por muchas bibliotecas, tales como
Offline
,is-reachable
y es ampliamente utilizado en toda la comunidad. Puedes usarlos si no quieres escribir todo por ti mismo. (Personalmente, me gusta el paquete NPMis-reachable
por ser simple).Ejemplo:
Creo que lo que tiene actualmente ya está bien, solo asegúrese de que esté llamando al punto final correcto.
Preguntas SO similares:
fuente
Puede usar https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event
y https://developer.mozilla.org/en-US/docs/Web/API/Window/online_event para verificar cuándo vuelve a estar en línea
fuente
Configurar un gancho personalizado
Configure un enlace con los eventos en línea y fuera de línea. luego actualice un estado y devuélvalo. De esta manera, puede usarlo en cualquier lugar de su aplicación con una importación. Asegúrese de limpiar con la función de retorno. Si no lo hace, agregará más y más oyentes de eventos cada vez que un componente use los montajes de gancho.
Para usar esto solo importa el gancho anterior y llámalo así.
fuente
Puede crear un componente para compartir entre todos los subcomponentes.
usado:
fuente