方法一:使用旧版浏览器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>
但是,我认为这不是您想要的,您需要一个实时连接验证器。
方法二:使用互联网检查互联网连接
如果外部互联网连接正常,您可以获得的唯一肯定的确认是使用它。问题是您应该调用哪台服务器以最小化成本?
互联网上有许多解决方案,任何以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>
);
}
}
我相信您目前所拥有的已经很好,只需确保它调用了正确的端点即可。
类似的问题: