react-online-hook
Version:
React hook to monitor network status.
37 lines (36 loc) • 1.22 kB
JavaScript
import { useState, useEffect } from 'react';
/**
* React hook to monitor network status.
*
* @since 1.0.0
*
* @see https://github.com/Uzwername/react-online-hook#readme
*/
const useOnlineStatus = () => {
// Check if required functionality is present
const isNavigatorOnLinePresent = (typeof window.navigator.onLine === 'boolean');
const [isAssumedStatus, setIsAssumedStatus] = useState(!isNavigatorOnLinePresent);
// If no navigator.onLine, assume true
const [isOnline, setIsOnline] = useState(isNavigatorOnLinePresent ? window.navigator.onLine : true);
useEffect(() => {
const handOnline = () => {
setIsAssumedStatus(false);
setIsOnline(true);
};
const handleOffline = () => {
setIsAssumedStatus(false);
setIsOnline(false);
};
window.addEventListener('online', handOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handOnline);
window.removeEventListener('offline', handleOffline);
};
}, []);
return {
isOnline,
isAssumedStatus
};
};
export default useOnlineStatus;