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



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

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

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

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

然而,gatsby似乎不允许我向查询传递任何var,甚至不允许我用参数对查询进行硬编码

例如

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

StaticQuery有自己的局限性(这就是为什么它被称为static(,并且不允许任何动态参数。正如它显示的盖茨比文件:

StaticQuery与页面查询的区别

StaticQuery可以完成页面查询可以包含的内容,包括片段。主要区别是:

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

当然,您可以使用硬编码值进行筛选,这实际上是唯一可用的解决方案,因为您不能使用动态值进行筛选。

检查您的localhost:8000/___graphql游乐场,看看您的查询是否有效(应该有效(。GraphQL中的链式值通常必须使用filter: { country__code: { eq:"CA" }}进行过滤

理想情况下,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();

相关内容

  • 没有找到相关文章

最新更新