Gatsby.js条件查询

时间:2018-07-26 08:22:34

标签: gatsby

我想在组件中使用条件查询,如下所示:

export const pageQuery =
  DATA_SOURCE === 'strapi'
    ? graphql`
        query AllNews {
          allStrapiApiupdates(sort: { order: DESC, fields: [date] }) {
            edges {
              node {
                id
                title
                description
                date(formatString: "DD.MM", locale: "ru")
              }
            }
          }
        }
      `
    : graphql`
        query AllNews {
          allMarkdownRemark(
            sort: { order: DESC, fields: [frontmatter___date] }
            filter: { frontmatter: { type: { eq: "news" } } }
          ) {
            edges {
              node {
                id
                frontmatter {
                  title
                  date(formatString: "DD.MM", locale: "ru")
                  type
                }
                html
              }
            }
          }
        }
      `

但是我得到了错误:

Uncaught (in promise) ReferenceError: graphql is not defined
        at Module.eval (D:/Projects/AHML-DWH/api-news-front/src/pages/index.tsx:68)
        at eval (D:/Projects/AHML-DWH/api-news-front/src/pages/index.tsx:146)
        at Module../src/pages/index.tsx (commons.js:9487)
 ...

我想这与转码有关。有什么办法吗?

1 个答案:

答案 0 :(得分:1)

简单的答案是,不,这是不可能的。

Gatsby将查询从模板文件中拉出,并对其进行特殊处理。它没有任何方法可以使这些查询动态化。从理论上讲,您可以使用GraphQL directive来实现。但是我认为,按照您发布的方式,不可能在盖茨比内部做到这一点。