Mam komponent React, który obejmuje flagę dostępności połączenia internetowego. Elementy interfejsu użytkownika należy dynamicznie zmieniać zgodnie ze stanem w czasie rzeczywistym. Ponadto funkcje zachowują się inaczej ze zmianami flagi.
Moja bieżąca implementacja odpytuje zdalny interfejs API przy użyciu Axios w każdej sekundzie, używając odpowiednio okresu i aktualizacji. Szukam bardziej szczegółowego i wydajnego sposobu wykonania tego zadania, aby usunąć 1-sekundowy błąd stanu przy minimalnych kosztach obliczeniowych. Rozważany online , tylko jeśli urządzenie ma zewnętrzne połączenie z Internetem
Obecna realizacja:
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} />;
}
}
Edytowane:
Poszukuje rozwiązania zdolnego do wykrywania zewnętrznej łączności z Internetem. Urządzenie może połączyć się z siecią LAN, która nie ma połączenia zewnętrznego. Jest to uważane za offline. Rozważa online wtedy i tylko wtedy , gdy urządzenie ma dostęp do zewnętrznych zasobów internetowych.
źródło
Odpowiedzi:
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:
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 .:
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 NPMis-reachable
za prostotę.)Przykład:
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:
źródło
Możesz użyć https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event
i https://developer.mozilla.org/en-US/docs/Web/API/Window/online_event do sprawdzania, kiedy jesteś ponownie online
źródło
Skonfiguruj niestandardowy hak
Przygotuj hak z wydarzeniami online, offline. następnie zaktualizuj stan i zwróć go. W ten sposób możesz go używać w dowolnym miejscu w aplikacji dzięki importowi. Upewnij się, że posprzątasz z funkcją powrotu. Jeśli tego nie zrobisz, będziesz dodawał coraz więcej detektorów zdarzeń za każdym razem, gdy komponent korzystający z zaczepów zostanie podłączony.
Aby tego użyć, wystarczy zaimportować powyższy hak i nazwać go w ten sposób.
źródło
Możesz utworzyć komponent, który będzie współużytkowany przez wszystkie podskładniki
używany:
źródło