繁体   English   中英

React Native - fetch 在 iOS 模拟器上不起作用(没有检查其他)

React Native - fetch not working on iOS simulator (didn't check other)

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这看起来像是 SO for React 上最常见的问题。 我尝试了各种问题/答案中给出的所有内容。 它要么过时,要么无法正常工作。

  1. 我创建了一个新的 react native 项目(所有内容都是最新/最新的)。
  2. 我简单地创建了一个具有 REST 调用的简单组件
  3. 此 REST 调用将永远不会完成,go 将执行 promise 的下一步。

这是代码

const Home = () => {

  useEffect(() => {
    console.log('start');
    fetch('https://jsonplaceholder.typicode.com/todos/1', {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json'
      }
     }).then((response) => response.json()).then((data) => {
       console.log('result: ', data);
     }).catch((err) => {
       console.log('failed', err);
     }).finally(() => {
       console.log('Any hope?');
     });
  });

  return (<Text>Lets log the API's for now</Text>);
};

上面的代码只记录了在cli中start或者调试window,没有别的,甚至最终写入的日志都没有。

我正在使用 xcode 12.0 (12A7209),反应 16.13.1,@babel/core 7.12.10。

这不仅仅是 fetch,我已经尝试过使用 http 的其他库来像axios这样的原生反应,没有任何帮助。 他们都倾向于表现相同。

我已经通过在模拟器中打开一个网站来检查浏览器,它有工作互联网 我尝试替换在线免费提供的 API。

顺便说一句,这是一个裸项目。 我用 expo 尝试了类似的示例,它的行为恰好相同。

谢谢

2 个回复

以防其他人需要它。 我通过添加解决了它

<key>NSAllowsArbitraryLoads</key>
<true/>

到位于项目中 ios 文件夹内的 Info.plist 文件。

于是我改变了

<key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>localhost</key>
        <dict>
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict> 

<key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
      <key>NSExceptionDomains</key>
      <dict>
        <key>localhost</key>
        <dict>
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>

我遇到了这个问题,XMLHttpRequest 从不触发它的回调,如 onload 或 onreadystatechange。 这导致 React-Native 的 Fetch 实现中断(因为它实际上是 XMLHttpRequest 的包装器)。 我从未解决过这个问题,但我通过使用不同的库将 React-Native Global 的 Fetch 原型替换为 react-native-fetch-blob 来解决这个问题。 react-native-fetch-blob 是使用 NativeModules 和更健壮实现的 fetch 长期运行替代品中维护得最好的版本。

所以对于那些在那里搜索的人来说,可能会有各种各样的问题。 某些版本的 Android 要求您声明 clearText(未加密)是否可以通过 Internet 发送。 一些 iOS 版本已经在 SSL 证书问题上出现问题,即使是有效证书也是如此。 这是一个不常见的错误,但 RN 的 fetch 问题记录可以追溯到 2015 年,与本文中的问题类似。 同样,我的解决方案是完全替换 Fetch,并用 react-native-fetch-blob 替换它,它具有 Fetch API 的本机实现。 Metro 中有时还会出现一个问题,如果您关闭 inlineRequires fetch 有时会开始工作。 忘记这一切并替换 fetch。

2 React-Native:无法找到iOS模拟器

我正在尝试启动我的第一个反应原生项目。 我无法启动iOS模拟器。 只有在我运行react-native run-ios命令时才会发生这种情况; 我不能为任何设备(iPhone 6,7,8和Xr)运行它,以便将XR从终端复制并粘贴到模拟器=“iPhoneXʀ”参数中。 如果我运行以下代码: ...

3 无法在iOS模拟器上运行成功的已建React-Native项目

我正在使用react-native编写一个APP,但是今天早上从github上退出后,事实证明我无法运行它了。 命令行中的日志如下: **建立成功**以下命令产生了分析器问题:正常x86_64分析Analyze Base / RCTModuleMethod.mm(1个分析器问题命令) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM