如何在React Native iOS中查看网络信息?

Sar*_*mar 7 javascript react-native react-native-ios

我需要在本机iOS中检查Internet连接

我会尝试以下代码:

NetInfo.isConnected.fetch().then(isConnected => {
   console.log(isConnected);
});
Run Code Online (Sandbox Code Playgroud)

在本机Android应用程序中可以正常工作,但它总是在本机iOS中返回'false'.

Mot*_*Azu 25

目前在react native的github中有一个关于这个的公开问题.

你可以在那里看到讨论,但总之 - fetch总是会返回false,但你可以通过监听连接更改事件来解决它.

那里的代码示例:

componentDidMount() {
    NetInfo.isConnected.addEventListener('change', this.handleConnectionChange);

    NetInfo.isConnected.fetch().done(
      (isConnected) => { this.setState({ status: isConnected }); }
    );
}

componentWillUnmount() {
    NetInfo.isConnected.removeEventListener('change', this.handleConnectionChange);
}

handleConnectionChange = (isConnected) => {
        this.setState({ status: isConnected });
        console.log(`is connected: ${this.state.status}`);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

好像这个问题一直努力的.此外,change事件已重命名为connectionChange.更新的解决方法代码:

componentDidMount() {
    NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectionChange);

    NetInfo.isConnected.fetch().done(
      (isConnected) => { this.setState({ status: isConnected }); }
    );
}

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

handleConnectionChange = (isConnected) => {
        this.setState({ status: isConnected });
        console.log(`is connected: ${this.state.status}`);
}
Run Code Online (Sandbox Code Playgroud)

更新:

change事件类型已过时.考虑使用connectionChange事件类型.

  • 这可能很晚.但.....不推荐使用NetInfo的"更改"事件.请转而使用"connectionChange"事件. (2认同)
  • 如果在卸载组件后解析了isConnected.fetch promise,则此方法会导致警告,原因是在未安装的组件上调用了setState (2认同)