У меня есть компонент React, который включает флаг доступности подключения к Интернету. Элементы пользовательского интерфейса должны динамически изменяться в соответствии с состоянием в реальном времени. Кроме того, функции ведут себя по-разному с изменениями флага.
Моя текущая реализация опрашивает удаленный API, используя Axios каждую секунду, используя интервал, и обновляет состояние соответственно. Я ищу более детальный и эффективный способ выполнить эту задачу, чтобы устранить 1-секундную ошибку состояния с минимальными вычислительными затратами. Рассматривается в режиме онлайн только в том случае, если устройство имеет внешнее подключение к Интернету.
Текущая реализация:
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} />;
}
}
Отредактировано:
Ищете решение, способное обнаруживать внешние подключения к Интернету. Устройство может подключаться к локальной сети, которая не имеет внешнего подключения. Таким образом, это считается в автономном режиме. Рассматривает онлайн, если и только если устройство имеет доступ к внешним интернет-ресурсам.
источник
Ответы:
Способ первый: использование устаревшего API браузера -
Navigator.onLine
Возвращает онлайн-статус браузера. Свойство возвращает логическое значение с истинным значением онлайн и ложным значением автономно. Свойство отправляет обновления всякий раз, когда способность браузера подключаться к сети изменяется. Обновление происходит, когда пользователь переходит по ссылкам или когда скрипт запрашивает удаленную страницу. Например, свойство должно возвращать значение false, когда пользователи нажимают на ссылки вскоре после того, как теряют подключение к Интернету.
Вы можете добавить его в жизненный цикл вашего компонента:
Тем не менее, я думаю, что это не то, что вам нужно, вам нужен валидатор соединений в реальном времени .
Способ второй: проверка интернет-соединения с помощью него
Единственное надежное подтверждение, которое вы можете получить, если внешнее подключение к Интернету работает, - это использовать его. Вопрос в том, какой сервер вы должны назвать, чтобы минимизировать стоимость?
Для этого в Интернете существует множество решений, и любая конечная точка, которая отвечает с быстрым статусом 204, является идеальной, например:
IMO, если вы запускаете это приложение React на сервере, имеет смысл обратиться к вашему собственному серверу, вы можете вызвать запрос на загрузку вашего
/favicon.ico
для проверки соединения.Эта идея (вызова своего собственного сервера) реализована многие библиотеки, такие как
Offline
,is-reachable
и широко используется в сообществе. Вы можете использовать их, если не хотите писать все самостоятельно. (Лично мне нравится пакет NPMis-reachable
за простоту.)Пример:
Я считаю, что то, что у вас есть, уже хорошо, просто убедитесь, что оно вызывает правильную конечную точку.
Подобные вопросы SO:
источник
Вы можете использовать https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event
и https://developer.mozilla.org/en-US/docs/Web/API/Window/online_event для проверки, когда вы снова в сети
источник
Настройте пользовательский крючок
Установите хук с онлайн, оффлайн событиями. затем обновите состояние и верните его. Таким образом, вы можете использовать его в любом месте вашего приложения с импортом. Убедитесь, что вы очистите с помощью функции возврата. Если вы этого не сделаете, вы будете добавлять все больше и больше слушателей событий каждый раз, когда компонент подключается с помощью хуков.
Чтобы использовать это, просто импортируйте вышеуказанный хук и назовите его так.
источник
Вы можете создать компонент для совместного использования между всеми подкомпонентами
используемый:
источник