web-dev-qa-db-ja.com

ReactネイティブiOSでネット情報を確認する方法は?

reactネイティブiOSでインターネット接続を確認する必要があります

私は次のコードを試してみます:

NetInfo.isConnected.fetch().then(isConnected => {
   console.log(isConnected);
});

それはreact native Androidアプリケーションで正常に機能しますが、react native iOSでは常に 'false'を返します。

7
Saravana Kumar

react native's 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イベントタイプの使用を検討してください。

25
Moti Azu