在react-native中,即使网络连接,NetInfo也会将isConnected返回为false

mcdcgff0  于 6个月前  发布在  React
关注(0)|答案(4)|浏览(82)

我们以如下方式使用react-native NetInfo。

export default class NetworkStatus extends React.PureComponent {
 constructor(props){
  super(props);

   NetInfo.addEventListener(
     'change',
     this.onConnectivityChange
  ); 
 }

 onConnectivityChange = (status) => {
   NetInfo.isConnected.fetch().then(isConnected => {
     console.log('*********Network status ' + (isConnected ? 'online' : 
    'offline'));
 });
}

字符串
在离线模式下启动应用程序。我们得到了以下控制台。

  • 网络状态离线。

然后我们打开WiFi,它是连接的。但我们得到了两次离线控制台。

  • 网络状态离线。
  • 网络状态离线。

这是NetInfo Library中的一个错误吗?有没有办法修复它?
使用的版本:
“react”:“16.0.0-alpha.6”
“react-native”:“0.44.0”,

8qgya5xd

8qgya5xd1#

你必须改变

NetInfo.addEventListener(
 'change',
 this.onConnectivityChange
);

字符串

NetInfo.addEventListener(
 'connectionChange',
 this.onConnectivityChange
);

htrmnn0y

htrmnn0y2#

如果你在模拟器中遇到这个问题,那是因为网络连接,因为react-native使用套接字来运行应用程序,一旦你关闭互联网连接,套接字就会中断,即使你打开它,套接字也不会恢复。请尝试在实际手机或发布模式下使用它。它工作正常。

componentDidMount() {
    NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange)
  }

  componentWillUnmount() {
    NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectivityChange)
  }

  handleConnectivityChange = (isConnected: any) => {
    if (isConnected) {
      this.setState({ isConnected })
    } else {
      this.setState({ isConnected })
    }
  }

字符串

qvsjd97n

qvsjd97n3#

我在尝试修复一个使用0.57.8的旧应用程序上的相同问题时对此进行了讨论。
把我们的React本地的NetInfo had a bug,后来被修复。
为了解决这个问题,我不得不更改代码,从@react-native-community/netinfo使用NetInfo,而不是react native附带的代码。
我希望这可以帮助其他人。

qfe3c7zg

qfe3c7zg4#

如果你在iOS上进行测试,也许这就是问题所在:在不同的Wi-Fi之间切换不会在iOS中发送事件

相关问题