Metode satu: Menggunakan API browser lama - Navigator.onLine
Mengembalikan status online browser. Properti mengembalikan nilai boolean, dengan arti sebenarnya online dan makna palsu offline. Properti mengirim pembaruan setiap kali kemampuan browser untuk terhubung ke jaringan berubah. Pembaruan terjadi ketika pengguna mengikuti tautan atau ketika skrip meminta halaman jarak jauh. Misalnya, properti seharusnya kembali false ketika pengguna mengklik tautan segera setelah mereka kehilangan koneksi internet.
Anda dapat menambahkannya ke siklus hidup komponen Anda:
Mainkan dengan kode di bawah ini menggunakan alat dev Chrome - alihkan "Online" ke "Offline" di bawah tab Network.
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>
Namun, saya pikir ini bukan yang Anda inginkan, Anda menginginkan validator koneksi waktu nyata .
Metode dua: Memeriksa koneksi internet dengan menggunakannya
Satu-satunya konfirmasi yang solid yang bisa Anda dapatkan jika konektivitas internet eksternal berfungsi adalah dengan menggunakannya. Pertanyaannya adalah server mana yang harus Anda hubungi untuk meminimalkan biaya?
Ada banyak solusi di internet untuk ini, semua titik akhir yang merespons dengan status cepat 204 sempurna, misalnya:
- menelepon ke server Google (untuk itu yang paling teruji-perang (?))
- memanggil titik akhir skrip JQuery yang telah di-cache (jadi meskipun server sedang down, Anda masih bisa mendapatkan skrip selama Anda memiliki koneksi)
- coba ambil gambar dari server yang stabil (mis .: https://ssl.gstatic.com/gb/images/v1_76783e20.png + stempel waktu tgl untuk mencegah caching)
IMO, jika Anda menjalankan aplikasi Bereaksi ini di server, masuk akal untuk menelepon ke server Anda sendiri, Anda dapat memanggil permintaan untuk memuat Anda /favicon.ico
untuk memeriksa koneksi.
Ide ini (memanggil server Anda sendiri) telah diterapkan oleh banyak perpustakaan, seperti Offline
, is-reachable
, dan secara luas digunakan di seluruh masyarakat. Anda dapat menggunakannya jika Anda tidak ingin menulis semuanya sendiri. (Secara pribadi saya suka paket NPM is-reachable
karena sederhana.)
Contoh:
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>
);
}
}
Saya percaya apa yang Anda miliki saat ini sudah baik-baik saja, pastikan saja itu memanggil titik akhir yang tepat.
Pertanyaan SO serupa: