javascript - Gatsby GraphQL 一次下载多个图像
问题描述
这个查询
query MyQuery {
allStrapiLogos {
nodes {
id
Image {
localFile {
publicURL
}
}
}
}
}
提供以下结果:
{
"data": {
"allStrapiLogos": {
"nodes": [
{
"id": "Logos_1",
"Image": [
{
"localFile": {
"publicURL": "someUrl.png"
}
},
{
"localFile": {
"publicURL": "someUrl.png"
}
}
]
},
{
"id": "Logos_2",
"Image": [
{
"localFile": {
"publicURL": "/someUrl.png"
}
}
]
},
{
"id": "Logos_3",
"Image": [
{
"localFile": {
"publicURL": "someUrl.svg"
}
}
]
}
]
}
},
"extensions": {}
}
通常,我所做的事情是这样的:
<Link to={publicURL}>
<ReactSVG wrapper="span" src={svgIcons.download} style={{ paddingRight: '16px' }} />
</Link>
这总是适用于 1 个文件。我不确定处理一次下载多个图像的最佳方法是什么。
GraphQL 查询由gatsby-source-plugin生成。有任何想法吗?
解决方案
所以我的问题是我不知道用户如何通过单击链接下载所有图像。
鉴于这种情况,我建议避免使用该Link
组件,因为它不符合您的要求。
我会做类似的事情:
<button onClick={downloadAllItems}>Download</button>
然后,在您的函数中:
const downloadAllItems=()=>{
data.allStrapiLogos.nodes.forEach(node=> window.open(`/yoursite.com/${node.Image.localFile.publicUrl}`))
}
修改自:
如果按钮位于表单内,则在循环之前添加一个event.preventDefault
循环以避免在需要时发出不需要的请求。
鉴于您的用例,我认为是通过一键功能下载所有项目的更直观的方法。
window.open
您可以通过设置并保存内存引用并在回调中设置位置来绕过浏览器(或广告块)的限制:
let newWindow=window.open(...)
然后:
newWindow.location=`/yoursite.com/${node.Image.localFile.publicUrl}`
推荐阅读
- docker - 在 Kubernetes 上拉取 dockerhub 镜像失败
- python - 如何为动态添加的属性定义 setter、getter
- javascript - $.scrollTo(this.hash || 0, 1500); ? 数字的含义是什么?
- apache-spark - 在 Spark 中使用“dropDuplicates”函数后获取删除记录的最佳方法
- mocking - 没有将结果作为 PHPUnit 对象模拟的数组
- mysql - 如何从所有数据都匹配且仅匹配的链接表中获取数据?
- java - 无法在 Java 项目中导入 com.auth0.jwt
- ansible - 在 Ansible 中基于扩展运行不同的脚本
- sql - Microsoft Access 查询输入条件
- sql - 如何在 PGSQL 中使用多个条件更新多个表列