Saya memiliki komponen Bereaksi, yang mencakup bendera ketersediaan konektivitas Internet. Elemen UI harus diubah secara dinamis sesuai dengan keadaan waktu-nyata. Juga, fungsi berperilaku berbeda dengan perubahan bendera.
Implementasi saya saat ini polling API jarak jauh menggunakan Axios di setiap detik menggunakan interval dan memperbarui negara sesuai. Saya mencari cara yang lebih terperinci dan efisien untuk melakukan tugas ini untuk menghapus kesalahan negara 1 detik dengan biaya komputasi minimum. Dianggap online jika dan hanya jika perangkat memiliki koneksi Internet eksternal
Implementasi saat ini:
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} />;
}
}
Diedit:
Mencari solusi yang mampu mendeteksi konektivitas Internet eksternal. Perangkat dapat terhubung ke LAN yang tidak memiliki koneksi eksternal. Jadi, ini dianggap offline. Mempertimbangkan secara online jika dan hanya jika perangkat memiliki akses ke sumber daya Internet eksternal.
sumber
Jawaban:
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:
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:
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 NPMis-reachable
karena sederhana.)Contoh:
Saya percaya apa yang Anda miliki saat ini sudah baik-baik saja, pastikan saja itu memanggil titik akhir yang tepat.
Pertanyaan SO serupa:
sumber
Anda dapat menggunakan https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event
dan https://developer.mozilla.org/en-US/docs/Web/API/Window/online_event untuk memeriksa ketika Anda kembali online
sumber
Siapkan pengait khusus
Siapkan pengait dengan aktivitas online dan offline. kemudian perbarui status dan kembalikan. Dengan cara ini Anda dapat menggunakannya di mana saja di aplikasi Anda dengan impor. Pastikan Anda membersihkan dengan fungsi pengembalian. Jika tidak, Anda akan menambah lebih banyak pendengar acara setiap kali komponen menggunakan kait pemasangan.
Untuk menggunakan ini, cukup impor kait di atas dan sebut seperti ini.
sumber
Anda dapat membuat komponen untuk dibagikan di antara semua subkomponen
bekas:
sumber