Search code examples
react-nativereact-native-community-netinfo

How to check the internet reachability in React-native?


I've tried @react-native-community/netinfo to check the internet reachability. But the scenario I want to implement is, suppose if my device is connected to a wifi hotspot from another device and if that device's mobile data is turned off I want to show an offline toast.

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;
}

But in this case, when the mobile data of the other device is turned off, it doesn't handle the change.


Solution

  • The non-deprecated way (using functional components) with the @react-native-community/netinfo package is now:

    import React, { useEffect } from "react";
    import NetInfo from "@react-native-community/netinfo";
    
      useEffect(() => {
        return NetInfo.addEventListener(state => {
          // use state.isInternetReachable or some other field
          // I used a useState hook to store the result for use elsewhere
        });
      }, []);
    

    This will run the callback whenever the state changes, and unsubscribe when the component unmounts.