graphql:使用动态过滤条件查询

时间:2018-08-15 17:34:08

标签: reactjs graphql gatsby

我正在尝试使用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字符串对象,但这似乎破坏了页面。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

最大的缺点是您失去了GraphQL的强类型功能。您也可以实现动态模式,但这有点过大,通常不是一个好习惯。仅当它是唯一选项时,我才会使用动态参数。通常可以重新安排它,以便您不必使用动态参数。

我不确定这是否有帮助,因为我对此不熟悉gatsby的特定问题,但这在一般的GraphQL模式中应该可以使用。