Перший спосіб: Використання застарілого API браузера - Navigator.onLine
Повертає статус веб-переглядача в Інтернеті. Властивість повертає булеве значення з істинним значенням в Інтернеті та помилковим значенням офлайн. Властивість надсилає оновлення щоразу, коли здатність браузера підключатися до мережі змінюється. Оновлення відбувається, коли користувач переходить посилання або коли сценарій вимагає віддалену сторінку. Наприклад, властивість повинна повернути помилкову, коли користувачі натискають на посилання незабаром після втрати з’єднання з Інтернетом.
Ви можете додати його до життєвого циклу компонентів:
Грайте з наведеним нижче кодом за допомогою інструментів для розробників Chrome - переключіть "Інтернет" на "Офлайн" на вкладці "Мережа".
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>
Однак я думаю, що це не те, чого ви хочете, ви хотіли перевірити підключення в реальному часі .
Спосіб другий: перевірка підключення до Інтернету за допомогою нього
Єдине тверде підтвердження, яке ви можете отримати, якщо працює зовнішнє підключення до Інтернету, - це скористатися ним. Питання в тому, який сервер вам слід зателефонувати, щоб мінімізувати витрати?
Для цього в Інтернеті є багато рішень, будь-яка кінцева точка, яка відповідає швидким статусом 204, є ідеальною, наприклад:
- виклик на сервер Google (бо це найбільше тестування (?))
- викликає кешовану кінцеву точку сценарію JQuery (тому навіть якщо сервер не працює, ви все одно можете отримати сценарій, поки у вас є з'єднання)
- спробуйте отримати зображення зі стабільного сервера (наприклад: https://ssl.gstatic.com/gb/images/v1_76783e20.png + часова мітка дати, щоб запобігти кешування)
IMO, якщо ви запускаєте цю програму React на сервері, має найбільш сенс зателефонувати на власний сервер, ви можете зателефонувати на запит, щоб завантажити ваш файл, /favicon.ico
щоб перевірити з'єднання.
Ця ідея (виклику свого власного сервера) реалізована багато бібліотек, такі як Offline
, is-reachable
і широко використовується в співтоваристві. Ви можете використовувати їх, якщо не хочете все написати самостійно. (Особисто мені подобається, що пакет NPM is-reachable
є простим.)
Приклад:
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>
);
}
}
Я вважаю, що у вас є вже добре, просто переконайтесь, що воно називає правильну кінцеву точку.
Подібні питання ТА: