1

我读到的所有内容都表明您可以将相对 url 传递给 fetch 调用,例如

fetch('/path/to/resource/')

但是当我这样做时,我得到一个“无法识别的 url”错误。相反,我被迫为我的本地主机做一个绝对网址,这让我的团队使用我的代码很痛苦,例如

fetch('http://123.0.0.44:8000/path/to/resource')

我目前只在 Android 中工作。我需要将基本网址添加到项目中吗?或者我是否必须通过从某个地方拉入基本 url 来形成动态绝对路径?如果可能的话,我宁愿只使用相对路径,但我找不到其他人遇到与我使用它相同的问题。似乎对其他人“只是工作”。

4

3 回答 3

2

可能的解决方案是创建一个配置文件,其中包含 fe 'SERVER_HOST' 变量,其中包括 ' http://123.0.0.44:8000 '。因此,在导入配置文件后,您可以编写类似

fetch( config.SERVER_HOST + '/path/to/resource' )
于 2016-12-06T20:57:43.633 回答
0

正如 fecebook 的官方 react-native 网站上所说,您应该输入 URL 作为 ebdpoint。关联

于 2016-12-07T00:40:05.997 回答
0

我刚刚在制作一个在 React Nativev0.59.5和 React Native Web之间共享代码的项目时遇到了这个问题v0.11.2fetch是在两种环境中都可用的全局 API(但如果您的目标是非常旧的浏览器,则可能需要对后者进行 polyfill)。有趣的是,React Native 的 fetch 实现与您为 web 浏览器 ( ) 的 polyfill 实现是相同whatwg-fetch的,因此它们的底层XmlHttpRequest实现可能是不同的地方。

fetch("some/relative/resource.txt")
.then((response) => { console.log("Responded!"); })
.catch(console.error);

// On React Native, logs the error "Network request failed".
// On React Native Web, logs "Responded!"

当我通过协议连接到 localhost 时http://,我仔细检查了我的应用程序传输安全设置是否正确(确实如此)。

在 React Native 的情况下,甚至在网络调试器中都没有显示相应的请求,所以我怀疑存在安全违规。然后我意识到这很明显:在 React Native Web 上,应用程序始终托管在 Web 上,因此fetch()请求是相对于该域发出的,这是很自然的。但是 React Native 应用程序并不托管在域上。

看起来 React Native 的实现将 URL 传递到 RCTNetworking.sendRequest(),然后最终传递到RCTNetworking.mm here,至少对于 iOS 而言。它最终作为[NSMutableURLRequest requestWithURL:URL]使用从字典通过 NSURL 形成的 NSURL [RCTConvert NSURL:query[@"url"]]这里RCTConvert 的实现表明 NSURL 是使用[NSURL URLWithString:path]没有relativeToURL路径的方法初始化的,所以 URL 是相对于空的(并且很可能返回nil)!所以难怪它失败了。从实现中也可以清楚地看出,React Native 中没有办法全局声明一个 URL 基础来作为此类 URL 的相对基础。

这里肯定有一个 Pull Request 的潜力来改善 React Native 和 React Native Web 之间的平衡。但在此之前,必须按照 phillipsh 的解决方案(在其中明确详细说明主机域)做一些事情......!

相关阅读

  • React Native 文档:网络
于 2019-07-18T15:01:40.900 回答