React Native api 调用不会在远程调试模式之外发生(仅限 iOS)

Posted

技术标签:

【中文标题】React Native api 调用不会在远程调试模式之外发生(仅限 iOS)【英文标题】:React Native api calls don't occur outside Remote Debug mode (iOS only) 【发布时间】:2019-07-24 05:32:53 【问题描述】:

我遇到了一个奇怪的问题,应用程序(iosandroid)在远程调试模式下的模拟器中使用时运行良好。

但是,当我为 iOS 开发关闭远程调试模式时,我无法从服务器接收数据。 Android 并非如此,它在远程调试模式之外可以正常工作。

想知道当我关闭远程调试模式时 iOS 会出现什么情况?

如果有助于缩小此处的问题范围,我还附上了来自 iOS 模拟器的网络请求的屏幕截图。

【问题讨论】:

可能是https连接的原因,你的api调用的是https还是http? API 调用是 https。 您可能应该发布用于发出网络请求的代码。以及您用于请求的任何依赖项。 【参考方案1】:

我遇到了同样的问题。如果你使用带有基本身份验证的 Axios 来发出 HTTP 请求,问题是 React Native 中没有定义 btoa。它只在调试模式下工作。

React Native atob() / btoa() not working without remote JS debugging

https://github.com/facebook/react-native/issues/21892

【讨论】:

【参考方案2】:

解决方案:

我也遇到了这个问题,我只需要 7 天就可以找到解决方案,这个解决方案很有趣,您只需在 API 请求末尾添加“/”即可

例如 www.domain.com/operation/staffOperations/rbl-3049OW09cfknpehop 在末尾添加'/' www.domain.com/operation/staffOperations/rbl-3049OW09cfknpehop/

它对我有用, 希望这对你也有用

【讨论】:

【参考方案3】:

我面临着完全相同的问题。但是,我注意到对于某些 API 调用,我在 API 请求中将虚拟数据作为 data: 传递。删除它对我有用

例如-

// Api was an axios instance created using axios.create with a baseURL
Api(
   method: 'GET',
   url: '/test'
   // data:     <== Removing / commenting this worked for me
)

更多信息在这里 - https://github.com/axios/axios/issues/2380

注意:我的baseURL 末尾没有“/”或 URL 路径末尾没有“/”。但是,这对我来说不是问题。正如@Gulshan Prajapati 指出的那样,我什至尝试使用“/”,但它对我的情况没有帮助。

【讨论】:

以上是关于React Native api 调用不会在远程调试模式之外发生(仅限 iOS)的主要内容,如果未能解决你的问题,请参考以下文章

启用远程调试 JS 后,无法在 React-Native 应用程序上向 API 发出请求

React Native教程 - 调用Web API

react-native之远程图片修改后APP不更新

如何使用 Redux 在 React Native 中使用线程调用 API?

React Native UseEffect API 调用

在 React Native 中使用 async/await 处理 API 调用