【问题标题】:graphql: querying with dynamic filtering criteriagraphql:使用动态过滤条件进行查询
【发布时间】:2019-01-22 14:57:39
【问题描述】:

我正在尝试使用 in 运算符执行查询,其中条件基于数组中的值。如何执行下面的查询以获取数组并将其基于变量数组的标准?我正在使用 reactjs + gatsby。

... graphql`
      query pageHeader {
         .... there is another query in the real code above this line
         allContentInSites (filter: {slug: {in: ` + JSON.stringify(searchCriteria.map(item => item.value)) + ` }})  {
          edges {
            node {
              title,
              link
            }
          }
        }
      }'

我最初认为上面的示例代码会为 in 标准传递一个 json 字符串对象,但这似乎破坏了页面。

【问题讨论】:

    标签: reactjs graphql gatsby


    【解决方案1】:

    这不适用于 Gatsby 中的页面查询。 GraphQL 查询在执行代码之前被静态评估并替换为数据。

    不过,您可能会挂接到 Gatsby 提供的 Node API 以在启动期间构建此查询。您可以使用onPreExtractQueries 创建查询,或者可能使用gatsby-node.js 中任何节点API 提供的graphql 对象来生成页面。

    【讨论】:

      【解决方案2】:

      如果您想实现动态过滤条件,您有几个选择 1)您可以使用字符串化的json并将其作为字符串发送并在解析器中的服务器上解析它 2) 您可以使用自定义标量graphql-type-json 作为参数类型或实现自己的custom scalar

      这样做的最大缺点是失去了 GraphQL 的强类型特性。您也可以实现动态模式,但这有点矫枉过正,通常不是一个好习惯。只有当它是唯一的选择时,我才会选择动态参数。通常它可以重新排列,这样您就不必使用动态参数。

      我不确定它是否有帮助,因为我不熟悉 gatsby 的具体问题,但这应该适用于一般的 GraphQL 模式。

      【讨论】:

        猜你喜欢
        • 2021-02-26
        • 1970-01-01
        • 2019-11-04
        • 2015-08-14
        • 2019-01-31
        • 2019-11-24
        • 1970-01-01
        • 2021-05-11
        • 2022-12-14
        相关资源
        最近更新 更多