Gatsby & GraphQL - 从查询文件中呈现下载链接

Posted

技术标签:

【中文标题】Gatsby & GraphQL - 从查询文件中呈现下载链接【英文标题】:Gatsby & GraphQL - render a download link from a queried file 【发布时间】:2020-02-15 13:04:53 【问题描述】:

我正在使用 Gatsby 构建一个静态网站,我需要在上面放置一些 .txt 或 .pdf 文件,以便访问者可以下载它们。我该怎么做?

我是一个新手,我的 GraphQL 知识真的很薄,我只用它来为我的组件获取一些图像。我的 'gatsby-config.js' 包含这个:


  resolve: `gatsby-source-filesystem`,
  options: 
    name: `documents`,
    path: `$__dirname/src/documents`,
  ,
,

我尝试了一些东西,在 GraphiQL 上这似乎是有效的代码:

const data = useStaticQuery(graphql`
    query 
      document1: file(relativePath: eq: "doc1.txt") 
        id
      
    
`) 

但我不知道如何在 JSX 中下载“document1”。

【问题讨论】:

【参考方案1】:

总是值得在GraphiQL explorer 中查看可查询的内容。那么你就可以按照the default starter's image component.中的静态查询的例子来操作了

如果您使用的是 Gatsby > v2.1,您可以使用 useStaticQuery 挂钩来执行此操作。

import React from "react"
import  useStaticQuery, graphql  from "gatsby"

const Download = () => 
  const data = useStaticQuery(graphql`
    query MyQuery 
      file(relativePath: eq: "doc1.txt") 
        publicURL
        name
      
    
  `)
  return <a href=data.file.publicURL download>Download data.file.name</a>


export default Download

如果没有,您可以使用Static query 进行此操作

import React from "react"
import  StaticQuery, graphql  from "gatsby"

const Download = () => (
  <StaticQuery
    query=graphql`
      query MyQuery 
        file(relativePath: eq: "doc1.txt") 
          publicURL
          name
        
      
    `
    render=data => <a href=data.file.publicURL download>Download data.file.name</a>
  />
)

export default Download

【讨论】:

这正是我所需要的。非常感谢!

以上是关于Gatsby & GraphQL - 从查询文件中呈现下载链接的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby:graphql 查询中的 gatsby-source-graphql 和 gatsby-plugin-sharp

gatsby 和 graphql :过滤特定的单个图像

Gatsby graphql 查询 GatsbyImage 以使用项目中的本地图像

gatsby-source-graphql + ACF 字段未显示

使用 gatsby-source-graphql 时,GraphIQL 资源管理器未在 Gatsby 中显示

gatsby-source-prismic-graphql 查询结构