React native 使用相对路径获取网络调用,获取;无法识别的url“;

React native 使用相对路径获取网络调用,获取;无法识别的url“;,react-native,fetch,reactjs-native,React Native,Fetch,Reactjs Native,我读到的所有内容都表明,您可以将相对url传递到获取调用中,例如 fetch('/path/to/resource/') 但当我这样做时,我会得到一个“无法识别的url”错误。相反,我被迫为我的本地主机创建一个绝对url,这让我的团队很难使用我的代码 fetch('http://123.0.0.44:8000/path/to/resource) 我目前只在安卓系统工作。我是否需要将基本url添加到项目或其他内容?或者我必须通过从某个地方拉入基本url来形成动态绝对路径吗?如果可能的话,我宁愿使用

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

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

但当我这样做时,我会得到一个“无法识别的url”错误。相反,我被迫为我的本地主机创建一个绝对url,这让我的团队很难使用我的代码

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


我目前只在安卓系统工作。我是否需要将基本url添加到项目或其他内容?或者我必须通过从某个地方拉入基本url来形成动态绝对路径吗?如果可能的话,我宁愿使用相对路径,但是我找不到其他人有和我使用它一样的问题。似乎对其他所有人都“有效”。

可能的解决方案是创建一个配置文件,该文件将包含f.e.“SERVER\u HOST”变量,该变量将包括“”。因此,在导入配置文件后,可以编写如下内容

fetch( config.SERVER_HOST + '/path/to/resource' )

正如fecebook官方react本地网站上所说的,您应该输入URL作为ebdpoint

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

fetch(“some/relative/resource.txt”)
.then((response)=>{console.log(“responsed!”);})
.catch(控制台错误);
//在React Native上,记录错误“网络请求失败”。
//在React Native Web上,日志“已响应!”
当我通过
http://
协议连接到localhost时,我仔细检查了我的应用程序传输安全设置是否正确(正确)

在React Native的情况下,网络调试器中甚至没有显示相应的请求,因此我怀疑存在安全冲突。然后我意识到这一点非常明显:在React Native Web上,应用程序总是托管在Web上,因此
fetch()
请求是相对于该域发出的,这是很自然的。但React本机应用程序不托管在域上

它看起来像React Native的实现,然后最终转到
RCTNetworking.mm
,至少对于iOS是这样。它使用从字典通过
[RCTConvert NSURL:query[@“URL”]
形成的NSURL,最终成为一个
[nsmutableUrlRequestWithURL:URL]
。RCTConvert的实现表明,NSURL是使用
[nsurlWithString:path]
方法初始化的,没有
relativeToURL
路径,因此URL是相对空的(很可能返回
nil
)!因此,它失败也就不足为奇了。从实现中也可以清楚地看到,React Native无法全局声明一个URL基,以使这些URL相对于

这里绝对有可能出现一个拉请求,以改进React-Native和React-Native-Web之间的奇偶性。但在那之前,必须按照phillipsh的解决方案做一些事情,在该解决方案中,您将明确地详细说明主机域

相关阅读
  • 反应本机文档:

这些示例是React本机应用程序吗?是的,这是React本机项目中的示例。您能给我看看其中的任何一个吗?也许有一些我们没有想到的技巧。那是我的本地主机ip。如果我的其他团队成员提取我的代码,它将不会正确地指向他们的本地主机。我确信我可以找到如何让服务器将其ip模板化到我的文件中,这样我就可以始终拥有正确的基本URL,但我最好奇的是,其他人是否在fetch-in-React-Native中看到这种行为,或者我的情况是否因某种原因而独特。