gatsby可以使用过滤器进行静态查询吗?

时间:2020-07-14 03:50:34

标签: graphql gatsby

可以使用过滤器进行静态查询吗?

我使用trapi作为我的配置服务器

我将在构建时收集配置数据

我有一个组件,需要按用户数据(例如用户组)查询配置数据

但是盖茨比似乎不允许我将任何var传递给查询,甚至不允许使用参数对查询进行硬编码

例如

graphql`
query MyQuery {
allStrapiAvailableLanguageByMarkets(filter: {country: {code: {eq: "CA"}}}) {
nodes {
country {
code
}
languages {
code
name
}
}
}
}`

1 个答案:

答案 0 :(得分:1)

StaticQuery有其自身的局限性(这就是为什么它们被称为静态的),并且它们不允许任何动态参数。如图Gatsby documention所示:

StaticQuery与页面查询的区别

StaticQuery可以完成大部分 页面查询可以执行的操作,包括片段。主要区别 是:

  • 页面查询可以接受变量(通过pageContext),但只能是 添加到页面组件
  • StaticQuery不接受变量(因此 名称为“静态”),但可以在任何组件(包括页面)中使用
  • StaticQuery不适用于原始React.createElement调用;请 使用JSX,例如

当然,您可以使用硬编码值进行过滤,这实际上是唯一无法使用动态值进行过滤的解决方案。

检查您的localhost:8000/___graphql游乐场,以查看您的查询是否有效(应该)。通常,必须使用filter: { country__code: { eq:"CA" }}

来过滤GraphQL中的链接值

理想情况下,您的useStaticQuery挂钩文件应如下所示:

import { graphql, useStaticQuery } from 'gatsby';

export const useYourItems = () => {
  const yourItems  = useStaticQuery(
    graphql`
        query MyQuery {
            allStrapiAvailableLanguageByMarkets(filter: {country: {code: {eq: "CA"}}}) {
                nodes {
                    country {
                        code
                    }
                    languages {
                        code
                        name
                    }
                }
            }
        }`,
  );

  return yourItems.allStrapiAvailableLanguageByMarkets;
};

然后,在另一个组件中:

  const yourItems = useYourItems();