You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何检测网络稳定性与质量?

解决React Native中网络连通性与质量检测问题

NetInfo只能判断设备是否连接到本地网络(比如WiFi、蜂窝数据),但没法验证是否真的能访问互联网,更没法评估网络质量。针对你的需求,这里有几个实用方案:

1. 主动验证互联网连通性

通过向可靠的服务器发送轻量请求来确认是否能上网。推荐用低延迟的公共服务接口(比如谷歌的generate_204无内容接口)或者你自己的后端健康检查接口,这类请求体积小、响应快。

示例代码:

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

// 检测是否能访问互联网
const checkInternetAccess = async () => {
  try {
    const response = await fetch('https://www.google.com/generate_204', {
      method: 'HEAD',
      timeout: 5000, // 5秒超时
    });
    return response.ok; // 状态码200-299则返回true
  } catch (error) {
    return false;
  }
};

用HEAD请求比GET更高效,因为只返回响应头,不用下载内容。

2. 评估网络质量

通过多次请求的响应时间、成功率来判断网络稳定性:

  • 记录每次请求的响应时间,平均时间超过阈值(比如1000ms)则判定为质量差
  • 连续多次请求失败,判定为网络中断
  • 统计一段时间内的请求成功率,低于阈值则提示用户

示例:

// 检测网络质量
const checkNetworkQuality = async () => {
  const startTime = Date.now();
  try {
    await fetch('https://www.google.com/generate_204', { timeout: 5000 });
    const responseTime = Date.now() - startTime;
    
    if (responseTime < 500) {
      return 'good'; // 优质网络
    } else if (responseTime < 1500) {
      return 'moderate'; // 一般网络
    } else {
      return 'poor'; // 差网络
    }
  } catch (error) {
    return 'offline'; // 无互联网
  }
};

3. 结合NetInfo实现实时监听

用NetInfo监听网络状态变化,当设备从离线变在线时,立刻触发连通性检测;之后定期(比如30秒)检测一次,避免频繁请求:

import { useEffect, useState } from 'react';

const useNetworkQuality = () => {
  const [quality, setQuality] = useState('unknown');

  useEffect(() => {
    // 初始检测
    const initialCheck = async () => {
      const result = await checkNetworkQuality();
      setQuality(result);
    };
    initialCheck();

    // 监听网络状态变化
    const unsubscribe = NetInfo.addEventListener(state => {
      if (state.isConnected) {
        checkNetworkQuality().then(setQuality);
      } else {
        setQuality('offline');
      }
    });

    // 定期检测
    const interval = setInterval(() => {
      checkNetworkQuality().then(setQuality);
    }, 30000); // 30秒一次

    return () => {
      unsubscribe();
      clearInterval(interval);
    };
  }, []);

  return quality;
};

// 在组件中使用
const App = () => {
  const networkQuality = useNetworkQuality();

  return (
    <View>
      {networkQuality === 'poor' && <Text>当前网络不稳定,请检查连接</Text>}
      {networkQuality === 'offline' && <Text>无法访问互联网</Text>}
    </View>
  );
};

4. 处理特殊场景

  • 公共WiFi需要登录:这类场景下请求会返回3xx跳转或200但内容是登录页,你可以检查响应的Content-Type或者内容是否包含特定关键字,来判断是否需要引导用户登录WiFi。
  • 蜂窝数据限速:可以通过检测多次请求的平均速度,结合运营商信息(需额外库支持)来提示用户。

内容的提问来源于stack exchange,提问作者Hamza Hmem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:10:23