是否可以使用过滤器进行静态查询?
我使用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();