我需要在React Native iOS中检查互联网连接。
我会尝试以下代码:
NetInfo.isConnected.fetch().then(isConnected => {
console.log(isConnected);
});
在React Native Android应用程序中可以正常工作,但在React Native iOS应用程序中始终返回“false”。
我需要在React Native iOS中检查互联网连接。
我会尝试以下代码:
NetInfo.isConnected.fetch().then(isConnected => {
console.log(isConnected);
});
在React Native Android应用程序中可以正常工作,但在React Native iOS应用程序中始终返回“false”。
目前在 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}`);
}
编辑:
看起来这个问题已经得到了解决。
同时,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}`);
}
更新:
change
事件类型已被弃用。请考虑使用 connectionChange
事件类型。