Graphql 盖茨比可以使用过滤器进行静态查询吗?

Graphql 盖茨比可以使用过滤器进行静态查询吗?,graphql,gatsby,Graphql,Gatsby,可以使用过滤器进行静态查询吗 我使用strapi作为我的配置服务器 我将在构建时收集配置数据 我有一个组件,需要按用户数据(例如用户组)查询配置数据 然而,盖茨比似乎不允许我将任何var传递给查询,甚至不允许用param硬编码查询 e、 g StaticQuery有它自己的限制(这就是为什么它们被称为static),并且它们不允许任何动态参数。如图所示: 静态查询与页面查询有何不同 StaticQuery可以完成大部分工作 页面查询可以查询的内容,包括片段。主要区别 它们是: 页面查询可以接受

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

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

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

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

然而,盖茨比似乎不允许我将任何var传递给查询,甚至不允许用param硬编码查询

e、 g


StaticQuery有它自己的限制(这就是为什么它们被称为static),并且它们不允许任何动态参数。如图所示:

静态查询与页面查询有何不同

StaticQuery可以完成大部分工作 页面查询可以查询的内容,包括片段。主要区别 它们是:

  • 页面查询可以接受变量(通过pageContext),但只能是 添加到页面组件
  • StaticQuery
    不接受变量(因此 名称“static”),但可用于任何组件,包括页面
  • StaticQuery不适用于原始React.createElement调用;请 使用JSX,例如
当然,您可以使用硬编码值进行过滤,这实际上是唯一可用的解决方案,因为您无法使用动态值进行过滤

检查您的
localhost:8000/\uuuuuuuu图形ql
playway以查看您的查询是否有效(应该有效)。通常,必须使用
filter:{country\uu code:{eq:“CA”}

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

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();

谢谢回复,我也读过了,但是打开它不允许过滤。。。即使是硬代码,您的查询是否在操场上工作(
localhost:8000/\uuuuuu graphql
)?您可以在那里自动添加过滤器。您是否检查了
过滤器:{country\uuu code:{eq:“CA”}
?它在游乐场中工作,但如果在reactjs组件中使用此静态查询->它说×错误:无法获取此静态查询的结果。这可能是Gatsby中的一个bug,如果刷新页面无法修复它,请在中打开一个问题。当然,您可以重用您的
useStaticQuery
。我提供了一个使用您的查询的示例。它不是嵌套函数,因此不会违反规则。如果您查看盖茨比官方文档中
useStaticQuery
的用法,它们提供了类似的用法。最后,钩子是一个函数。此外,它允许您在不同的组件中重复使用它。试试看,让我知道。
  const yourItems = useYourItems();