在另一个查询中重用 GraphQL 查询而不重复

Posted

技术标签:

【中文标题】在另一个查询中重用 GraphQL 查询而不重复【英文标题】:Reusing a GraphQL query in another query without duplicating 【发布时间】:2019-02-20 19:42:33 【问题描述】:

假设我有两个 GraphQL 查询。

查询 A:


  entry(section: [privacyStatement]) 
    ... on PrivacyStatement 
      title
      slug
      pageTitle
      metaDescription
      metaImage 
        id
        title
        url
      
    
  

查询 B:


  entry(section: [contact]) 
    ... on Contact 
      title
      slug
      pageTitle
      metaDescription
      metaImage 
        id
        title
        url
      
    
  

现在我希望两个查询都包含另一个查询:

查询 C:

  
    services: categories(groupId: 1, level: 1) 
      id
      title
      slug
      children 
        id
        title
        slug
      
    
  

如何在查询 A 和 B 中不重复查询 C 的情况下做到这一点(这不会很干燥)?如果我理解正确,您只能在一个查询中使用片段。

更新:

所以我的意思是这样的:

Query A 
  entry(section: [privacyStatement]) 
    ... on PrivacyStatement 
      title
      slug
      pageTitle
      metaDescription
      metaImage 
        id
        title
        url
      
    
  

QueryC

和:

Query B 
  entry(section: [contact]) 
    ... on Contact 
      title
      slug
      pageTitle
      metaDescription
      metaImage 
        id
        title
        url
      
    
  

QueryC

【问题讨论】:

【参考方案1】:

您可以在 Query 和 Mutations 上定义片段并像这样使用它们:

Query A 
  entry(section: [privacyStatement]) 
    ... on PrivacyStatement 
      title
      slug
      pageTitle
      metaDescription
      metaImage 
        id
        title
        url
      
    
  
  ...C


fragment C on Query 
  services: categories(groupId: 1, level: 1) 
    id
    title
    slug
    children 
      id
      title
      slug
    
  

你不能定义这样的东西!

query A(...)...
query B(...)...

【讨论】:

感谢您的回答;我不确定这是否涵盖了我的意思。我的意思是,有没有办法在查询 A 和查询 B 中重用查询 C,而无需将查询 C 显式添加到查询 A 和 B。我已经更新了问题。 :D 谢谢。那么我只需要重复查询即可。

以上是关于在另一个查询中重用 GraphQL 查询而不重复的主要内容,如果未能解决你的问题,请参考以下文章

向 BigQuery 查询添加“计算列”而不重复计算

Informix SQL / 在另一个查询中重用存储过程的结果

如何重用graphql查询中的字段

GraphQL 仅查询看不见的内容 - Schema Advice

GraphQL:如何重用相同的类型进行查询和变异?

为多个 vue 属性重用 apollo graphql 查询定义