React native 使用相对路径获取网络调用,获取;无法识别的url“;
我读到的所有内容都表明,您可以将相对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来形成动态绝对路径吗?如果可能的话,我宁愿使用
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 Webv0.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的解决方案做一些事情,在该解决方案中,您将明确地详细说明主机域
相关阅读
- 反应本机文档: