React Native升级至0.68.2后,Fetch与Axios GET请求失效求助
解决方案
1. 给Fetch添加超时机制
Fetch默认没有超时限制,如果请求因网络波动、后端无响应会一直挂起,不会触发catch分支。可以通过AbortController实现超时中断:
const getUser = async () => { try { setIsLoading(true); const requestParams = { userId: authReducer.userId, token: authReducer.userToken, limit: 20 }; console.log('start'); // 10秒超时配置 const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 10000); let response = await fetch('https://websiteurl.com/getuserbyid/4', { method: 'GET', headers: { 'Accept': 'application/json', Authorization: `Bearer ${requestParams.token}` }, signal: controller.signal }); clearTimeout(timeoutId); console.log('end'); console.log('Response status:', response.status); // 非2xx状态码手动抛错,进入catch if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } let responseJson = await response.json(); console.log(responseJson); setIsLoading(false); } catch (error) { console.log('Error:', error); setIsLoading(false); } }
2. 调整请求Header
GET请求通常不需要设置Content-Type: application/json(GET无请求体,部分后端会拒绝该Header):
- 直接移除
Content-Type配置项 - 检查
Authorization格式:确保Bearer后有空格,且requestParams.token不为空或格式错误
3. 校验网络安全配置
RN 0.68+升级后默认启用更严格的网络安全策略:
Android端
- 若请求HTTP接口,在
android/app/src/main/AndroidManifest.xml的<application>标签添加:android:usesCleartextTraffic="true" - HTTPS请求需确保服务器证书有效,自定义证书需配置
network_security_config
iOS端
- 若需允许非HTTPS请求,在
ios/[项目名]/Info.plist中添加ATS例外:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
(上线建议仅针对特定域名配置,避免全局放宽)
4. 排查依赖冲突
- 确保axios版本适配RN 0.68+,执行以下命令重装依赖:
rm -rf node_modules package-lock.json npm install cd ios && pod install && cd ..
- 检查是否有第三方网络拦截库(如
react-native-network-info)与新版本RN冲突,可临时移除测试
内容的提问来源于stack exchange,提问作者Gaurav Khatri
相关产品推荐
相关产品推荐

