Birinci yöntem: Eski tarayıcı API'sını kullanma - Navigator.onLine
Tarayıcının çevrimiçi durumunu döndürür. Özellik, gerçek anlamı çevrimiçi ve yanlış anlamı çevrimdışı olmak üzere bir boole değeri döndürür. Özellik, tarayıcının ağa bağlanma yeteneği değiştiğinde güncellemeler gönderir. Güncelleştirme, kullanıcı bağlantıları izlediğinde veya bir komut dosyası uzak sayfa istediğinde gerçekleşir. Örneğin, kullanıcılar İnternet bağlantısını kaybettikten kısa bir süre sonra bağlantıları tıkladığında özellik yanlış döndürmelidir.
Bileşen yaşam döngünüze ekleyebilirsiniz:
Chrome geliştirici araçlarını kullanarak aşağıdaki kodla oynayın - Ağ sekmesi altındaki "Çevrimiçi" yi "Çevrimdışı" olarak değiştirin.
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>
Ancak, bu istediğiniz şey olmadığını düşünüyorum, gerçek zamanlı bir bağlantı doğrulayıcı istediniz .
İkinci yöntem: İnternet bağlantısını kullanarak kontrol etme
Harici internet bağlantısı çalışıyorsa alabileceğiniz tek sağlam onay kullanmaktır. Soru, maliyeti en aza indirmek için hangi sunucuyu aramanız gerektiğidir?
İnternette bunun için birçok çözüm var, hızlı 204 durumuyla yanıt veren herhangi bir uç nokta mükemmel, örneğin:
- Google sunucusuna çağrı yapıyor (savaşta en fazla test edilen (?))
- önbelleğe alınmış JQuery komut dosyası bitiş noktasını çağırarak (sunucu kapalı olsa bile, bir bağlantınız olduğu sürece komut dosyasını almanız gerekir)
- kararlı bir sunucudan resim getirmeyi deneyin (ör: önbelleğe almayı önlemek için https://ssl.gstatic.com/gb/images/v1_76783e20.png + tarih zaman damgası)
IMO, bu React uygulamasını bir sunucuda çalıştırıyorsanız, kendi sunucunuzu aramak en mantıklıdır /favicon.ico
, bağlantıyı kontrol etmek için cihazınızı yüklemek için bir istek çağırabilirsiniz .
(Kendi sunucuyu aramanın) Bu fikir gibi birçok kütüphaneler tarafından uygulamaya konmuştur Offline
, is-reachable
ve yaygın toplum genelinde kullanılmaktadır. Her şeyi kendiniz yazmak istemiyorsanız bunları kullanabilirsiniz. (Şahsen NPM paketinin is-reachable
basit olmasını seviyorum .)
Misal:
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>
);
}
}
Şu anda sahip olduğunuz şeyin zaten iyi olduğuna inanıyorum, sadece doğru uç noktası çağırdığından emin olun.
Benzer SO soruları: