可以使用过滤器进行静态查询吗?
我使用trapi作为我的配置服务器
我将在构建时收集配置数据
我有一个组件,需要按用户数据(例如用户组)查询配置数据
但是盖茨比似乎不允许我将任何var传递给查询,甚至不允许使用参数对查询进行硬编码
例如
graphql`
query MyQuery {
allStrapiAvailableLanguageByMarkets(filter: {country: {code: {eq: "CA"}}}) {
nodes {
country {
code
}
languages {
code
name
}
}
}
}`
答案 0 :(得分:1)
StaticQuery有其自身的局限性(这就是为什么它们被称为静态的),并且它们不允许任何动态参数。如图Gatsby documention所示:
StaticQuery与页面查询的区别
StaticQuery可以完成大部分 页面查询可以执行的操作,包括片段。主要区别 是:
- 页面查询可以接受变量(通过pageContext),但只能是 添加到页面组件
StaticQuery
不接受变量(因此 名称为“静态”),但可以在任何组件(包括页面)中使用- StaticQuery不适用于原始React.createElement调用;请 使用JSX,例如
当然,您可以使用硬编码值进行过滤,这实际上是唯一无法使用动态值进行过滤的解决方案。
检查您的localhost:8000/___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();