将互联网连接从打开更改为关闭

时间:2019-06-24 05:41:29

标签: javascript react-native snackbar react-native-community-netinfo

我使用NetInfo库检测Internet连接是否可用。它工作正常,但是当Internet从打开更改为关闭时,NetInfo函数中的小吃栏不会显示。在没有互联网的情况下以及从互联网开始的情况下,Snackbar都可以完美显示。 每次将Internet从关闭更改为打开时,从ON更改为OFF时,每次未显示时都会显示小吃栏。所有日志在任何情况下均显示完美。如果我放置一个警报框而不是小吃栏,那么一切都完美。

handleConnectivityChange = (isConnected) => {

  NetInfo.isConnected.fetch().done((isConnected) => {

    console.log('Dashboard ConnectivityChanged');

    console.log('IsConnectedValue:'+ isConnected );

    if(isConnected == true)
    {
        console.log('Dashboard Connected');

        Snackbar.show({
          title: 'Connected to Internet',
          duration: Snackbar.LENGTH_LONG,
          action: {
            title: 'DISMISS',
            color: 'rgb(216,21,88)',
            onPress: () => { /* Dismiss snackbar default */ },
          },
        });
    }
    else
    {
        console.log('Dashboard No Internet');

        Snackbar.show({
          title: 'No Internet Connection',
          duration: Snackbar.LENGTH_LONG,
          action: {
            title: 'DISMISS',
            color: 'rgb(216,21,88)',
            onPress: () => { /* Dismiss snackbar default */ },
          },
        });
    }
  });
}

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题。我不确定是什么原因造成的,但作为将其包装在setTimeout中的临时解决方案,似乎可以完成工作,即

setTimeout(() => {
  Snackbar.show({
      title: 'Connected to Internet',
      duration: Snackbar.LENGTH_LONG,
      action: {
        title: 'DISMISS',
        color: 'rgb(216,21,88)',
        onPress: () => { /* Dismiss snackbar default */ },
      },
    });
}, 1000);

此外,为了防止Snackbar导入整个应用程序和代码可重用性,请考虑将 Snackbar.show()放在单独的函数中。

目前,我在整个应用程序中都调用的 utils.js 中有此功能:

export const showSnackbar = ({ title, duration = Snackbar.LENGTH_SHORT, action }) => {
  Snackbar.dismiss(); // dismiss if a snackbar is still "alive"
  if (!action) {
    Snackbar.show({
        title: message,
        duration,
    });
  } else {
    Snackbar.show({
        title,
        duration,
        action
    });
  }
};

请注意,一开始,如果先前显示的小吃栏仍在屏幕上,我将其关闭。希望这会有所帮助:)