如何在React-native中检查互联网的可达性?

时间:2019-08-20 06:49:29

标签: react-native react-native-android react-native-community-netinfo

我已经尝试@ react-native-community / netinfo来检查互联网的可达性。但是我要实现的方案是,假设我的设备从另一台设备连接到wifi热点,并且如果该设备的移动数据已关闭,我想显示脱机吐司。

componentDidMount() {
 NetInfo.addEventListener(status => {
  this.props.checkOnlineStatus(
    status.isConnected,
    status.isInternetReachable
  );
  this.setState({
    isConnected: status.isConnected,
    isInternetReachable: status.isInternetReachable
  });
 });
}

render() {
 if (!this.state.isInternetReachable && this.props.isOfflineNoticeVisible) {
  return <MiniOfflineSign />;
 }
 return null;
}

但是在这种情况下,当另一台设备的移动数据关闭时,它不会处理更改。

2 个答案:

答案 0 :(得分:1)

async function InternetCheck() {
    const connectionInfo = await NetInfo.getConnectionInfo();
    if (connectionInfo.type === 'none') {
        alert('PLEASE CONNECT TO INTERNET');
    } else {
            //navigate to page or Call API
    }
}

答案 1 :(得分:0)

这些连接类型可以帮助:https://github.com/react-native-community/react-native-netinfo#netinfostatetype

否则:

那么请确保您在线,只需执行超时获取操作即可:

 export default function(url, options, timeout = 5000) {
      return Promise.race([
        fetch(url, options),
        new Promise((_, reject) => setTimeout(() => reject("timeout"), timeout)),
      ]);
    }

然后像这样使用它:

fetchWithTimeout(url, options)
        .then(resp => {
          if (resp.status === 200) {
            let json = resp.json().then(j => {
              return j;
            });
        })
        .catch(ex => {
          // HANDLE offline usage
          if (ex === "timeout") return true;
          //ANY OTHER CASE RETURN FALSE
          return false;
}