방법 1 : 레거시 브라우저 API 사용- Navigator.onLine
브라우저의 온라인 상태를 반환합니다. 이 속성은 부울 값을 반환하며 true는 온라인을 의미하고 false는 오프라인을 의미합니다. 이 속성은 브라우저가 네트워크에 연결할 수있는 기능이 변경 될 때마다 업데이트를 보냅니다. 사용자가 링크를 따라갈 때 또는 스크립트가 원격 페이지를 요청할 때 업데이트가 발생합니다. 예를 들어 사용자가 인터넷 연결이 끊긴 후 링크를 클릭하면 속성이 false를 반환해야합니다.
컴포넌트 라이프 사이클에 추가 할 수 있습니다.
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>
그러나 이것이 원하는 것이 아니라고 생각합니다. 실시간 연결 검사기 를 원했습니다 .
방법 2 : 인터넷을 사용하여 인터넷 연결 확인
외부 인터넷 연결이 작동중인 경우 확인할 수있는 유일한 확인 방법입니다. 문제는 비용을 최소화하기 위해 어떤 서버를 호출해야 하는가입니다.
인터넷에는 많은 솔루션이 있으며, 빠른 204 상태로 응답하는 엔드 포인트는 다음과 같습니다.
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>
);
}
}
나는 당신이 현재 가지고있는 것이 이미 훌륭하다고 생각합니다. 올바른 엔드 포인트를 호출하고 있는지 확인하십시오.
비슷한 질문 :