Metoda 1: Korzystanie ze starszego interfejsu API przeglądarki - Navigator.onLine
Zwraca status online przeglądarki. Właściwość zwraca wartość logiczną o prawdziwym znaczeniu online i fałszywym znaczeniu offline. Właściwość wysyła aktualizacje za każdym razem, gdy zdolność przeglądarki do łączenia się z siecią zmienia się. Aktualizacja następuje, gdy użytkownik korzysta z łączy lub gdy skrypt żąda strony zdalnej. Na przykład właściwość powinna zwrócić wartość false, gdy użytkownicy klikną łącza wkrótce po utracie połączenia z Internetem.
Możesz dodać go do swojego cyklu życia komponentu:
Graj za pomocą poniższego kodu za pomocą narzędzi programistycznych Chrome - przełącz „Online” na „Offline” na karcie Sieć.
class App extends React.PureComponent {
state = { online: window.navigator.onLine }
componentDidMount() {
window.addEventListener('offline', this.handleNetworkChange);
window.addEventListener('online', this.handleNetworkChange);
}
componentWillUnmount() {
window.removeEventListener('offline', this.handleNetworkChange);
window.removeEventListener('online', this.handleNetworkChange);
}
handleNetworkChange = () => {
this.setState({ online: window.navigator.onLine });
}
render() {
return (
<div>
{ this.state.online ? 'you\'re online' : 'you\'re offline' }
</div>
);
}
}
ReactDOM.render(
<App />
, document.querySelector('#app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
Myślę jednak, że to nie jest to, czego chciałeś, chciałeś walidatora połączenia w czasie rzeczywistym .
Metoda druga: Sprawdzanie połączenia internetowego za pomocą go
Jedynym solidnym potwierdzeniem, które można uzyskać, jeśli działa zewnętrzne połączenie internetowe, jest jego użycie. Pytanie brzmi, do którego serwera należy zadzwonić, aby zminimalizować koszty?
Istnieje wiele rozwiązań w Internecie, każdy punkt końcowy, który odpowiada szybkim statusem 204, jest idealny, np .:
- dzwonienie do serwera Google (ponieważ jest to najbardziej przetestowany w bitwie (?))
- wywołując buforowany punkt końcowy skryptu JQuery (więc nawet jeśli serwer jest wyłączony, nadal powinieneś być w stanie uzyskać skrypt, dopóki masz połączenie)
- spróbuj pobrać obraz ze stabilnego serwera (np .: https://ssl.gstatic.com/gb/images/v1_76783e20.png + datownik, aby zapobiec buforowaniu)
IMO, jeśli używasz tej aplikacji React na serwerze, najlepiej jest zadzwonić na własny serwer, możesz zadzwonić z prośbą o załadowanie, /favicon.ico
aby sprawdzić połączenie.
Ten pomysł (nazywając swój własny serwer) został wdrożony w wielu bibliotekach, takich jak Offline
, is-reachable
i jest powszechnie stosowany w całej Wspólnocie. Możesz ich użyć, jeśli nie chcesz wszystkiego pisać samodzielnie. (Osobiście podoba mi się pakiet NPM is-reachable
za prostotę.)
Przykład:
import React from 'react';
import isReachable from 'is-reachable';
const URL = 'google.com:443';
const EVERY_SECOND = 1000;
export default class App extends React.PureComponent {
_isMounted = true;
state = { online: false }
componentDidMount() {
setInterval(async () => {
const online = await isReachable(URL);
if (this._isMounted) {
this.setState({ online });
}
}, EVERY_SECOND);
}
componentWillUnmount() {
this._isMounted = false;
}
render() {
return (
<div>
{ this.state.online ? 'you\'re online' : 'you\'re offline' }
</div>
);
}
}
Uważam, że to, co obecnie masz, jest już w porządku, po prostu upewnij się, że wywołuje właściwy punkt końcowy.
Podobne pytania SO: