【问题标题】:Passing a pageContext array to Gatsby's pageQuery将 pageContext 数组传递给 Gatsby 的 pageQuery
【发布时间】:2021-04-26 21:26:27
【问题描述】:

为了将 pageContext 数组传递给 gatsby 页面查询,我苦苦挣扎了好几个小时

如何将数组传递给 GraphQL?

query AllCategoriesQuery($id: Int!, $cat: Array) {

以下是我的完整查询

export const query = graphql`
  query AllCategoriesQuery($id: Int!) {
    allStrapiChildcategories: allStrapiChildcategories(
      filter: { category: { id: { eq: $id } } }
    ) {
      edges {
        node {
          id
          title
          strapiId
          category {
            id
            title
          }
        }
      }
    }
    allProducts: allStrapiProducts(
      filter: { childcategory: { id: { in: $cat } } }
    ) {
      edges {
        node {
          id
          title
          strapiId
          childcategory {
            id
          }
        }
      }
    }
  }
`

【问题讨论】:

    标签: graphql gatsby


    【解决方案1】:

    使用pageContext 和 GraphQL 传递数组有点棘手。

    试试这个:

    query AllCategoriesQuery($id: Int!, $cat: [Int!]!) {}
    

    这样,您定义了一个不可为空的整数列表(标记为感叹号,!),这意味着这是一个必填字段。

    在 GraphQL 中,它们被称为“列表”而不是数组,尽管类比并不完全准确。该列表按顺序排列项目。在 SDL(架构定义语言)中,列出的修饰符写成方括号,括号中包含类型的实例。

    有关 GraphQL Schema 的更多信息:https://graphql.org/learn/schema/

    【讨论】:

    • 我收到此错误变量“$cat”类型为“[String!]!”用于预期类型“[Int]”的位置。
    • 我认为$cat 是一个字符串数组,所以我使用了[String!]!。在filter: { childcategory: { id: { in: $cat } } } 中查看您的过滤器,我猜这将是一个整数数组。我已经更新了答案,添加了类型:$cat: [Int!]!
    • 感谢@Ferran,我在 pageContext $cat 中了解了这种格式 ["1234","2245","3567"]
    • 我现在收到了!变量“$cat”的值无效“childCategories”;预期类型 Int。 Int 不能表示非整数值:“childCategories” 当您或插件/主题通过模式自定义 API 显式定义此 GraphQL 对象类型的 GraphQL 模式并且“childCategories”不匹配的(标量)类型时,可能会发生这种情况“变量“$cat”的值无效“childCategories”;预期类型为 Int.Int”。
    • 以前从未见过。您可以尝试将$cat: [Int!]! 更改为$cat: [Float!]! 吗?还有一个问题,你所有的allProducts 都有要过滤的类别吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 2018-03-04
    • 2019-07-25
    • 2020-03-23
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多