React Native 中的 NetInfo 使用模式

NetInfo usage pattern in React Native

我正在尝试在我的 React Native 应用程序中创建一个稳健的模式,这样如果没有互联网连接,我将不会进行 API 调用,而是显示一条“连接丢失...”消息.

我创建了以下 util 函数并尝试使用 fetch 将其合并到我的 API 调用中,但在收到响应后它似乎没有命中 then 块。

检查连接的函数如下:

import NetInfo from "@react-native-community/netinfo";

export const isConnectedToInternet = () => {

   NetInfo.fetch().then(state => {
      return state.isConnected;
    });
};

下面是我尝试使用它的方式:

import { isConnectedToInternet } from '../my-utils';

export const someApiCall = () => {

   isConnectedToInternet()
      .then(result => {

         if(result) {
          
             return (dispatch) => fetch ('https://myapi/someendpoint', fetchOptionsGet())
                               .then(response => {

                                  // Process data...
                               })
         } else {
    
             Alert.alert('No Internet connection!');
         }
   })
};

知道为什么我没有碰到 then 块或建议使它成为一个稳健的模式吗?

如果您想 然后 在您的 isConnectedToInternet 上,您应该 return 做出承诺。尝试这样的事情:

import NetInfo from "@react-native-community/netinfo";

export const isConnectedToInternet = () => {
    return new Promise((resolve, reject) => {
        NetInfo.fetch().then(state => {
            resolve(state.isConnected);
        }).catch(e => reject(e));
    })
};

在移动软件中,最佳做法是始终尝试远程 API,然后在没有互联网时处理异常。 iOS 和 Android 提供的可达性 API 并不总是准确的 - 它们需要轮询以确定连接性。因此,应用程序最好始终尝试 fetch,即使它认为互联网可能已关闭,以防设备在上次可达性检查后恢复连接。

如果您想要模拟某些状态,当应用认为它处于离线状态时显示 UI,您可以使用 NetInfo.addEventListener() 函数来实现。我想也有一个 React 钩子。