我读过的所有内容都说您可以将相对URL传递到fetch呼叫中,例如
fetch('/path/to/resource/')
但是,当我这样做时,我会遇到"未认可的URL"错误。相反
fetch('http://123.0.0.44:8000/path/to/resource')
我目前仅在Android工作。我需要将基本URL添加到项目之类的东西吗?还是我必须通过从某个地方拉出基本URL来塑造动态的绝对道路?如果可能的话,我宁愿只使用相对路径,但是我找不到其他人遇到与使用相同的麻烦。似乎对其他所有人都"工作"。
可能的解决方案是创建一个具有F.E.的配置文件。" server_host"变量,其中包括'http://123.0.0.44:8000'。因此,导入配置文件后,您可以写
之类的东西fetch( config.SERVER_HOST + '/path/to/resource' )
如Fecebook的官方反应网站上所述,您应该输入URL作为EBDPoint。链接
在制作一个在React Antive v0.59.5
和React Native Web v0.11.2
之间共享代码的项目时,我刚刚遇到了这一点。fetch
是两种环境中可用的全局API(但是,如果您针对非常旧的浏览器,则可能需要对后者进行多填充)。有趣的是,React Native的Fetch实现与您对Web浏览器的多填充相同(whatwg-fetch
),因此它们的基础XMLHTTTPRequest实现可能与众不同。
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!"
当我通过http://
协议连接到Localhost时,我仔细检查了我的App Transport Security是否正确设置了(是)。
在React Native的情况下,网络调试器中甚至没有显示相应的请求,因此我怀疑违反安全性。然后我意识到这很明显:在React Native Web上,该应用程序始终托管在网络上,因此自然而然地,fetch()
请求是相对于该域的。但是React Native应用程序未托管在域上。
看来,React Native的实现将URL传递到rctnetworking.sendrequest(),然后最终在此处使用RCTNetworking.mm
,至少对于iOS而言。它最终是使用[RCTConvert NSURL:query[@"url"]]
由字典形成的NSURL的[NSMutableURLRequest requestWithURL:URL]
。RCTConvert的实现在这里表明NSURL是使用没有relativeToURL
路径的[NSURL URLWithString:path]
方法初始化的,因此URL与Noth note(并且很可能返回nil
)!因此,难怪它失败了。从实施中也可以清楚地看出,本机上没有办法向全球声明一个URL基础,以相对于此类URL。
肯定有可能在这里提出拉动请求,以提高反应本机和反应本地网络之间的奇偶校验。但是在那之前,沿Phillipsh解决方案的线条,您明确详细介绍了主机域,必须做。!
相关阅读
- 反应本地文档:网络