如何:具有动态区域/组件的 Strapi GraphQL 突变

Posted

技术标签:

【中文标题】如何:具有动态区域/组件的 Strapi GraphQL 突变【英文标题】:How to: Strapi GraphQL mutation with dynamic zones/component 【发布时间】:2020-06-26 05:06:54 【问题描述】:

我正在尝试为 Strapi 创建一个可创建/编辑动态区域的突变。 Strapi 中的动态区域是联合类型。如何使用 动态区域 进行 GraphQL mutation

确切地说。这里应该是什么内容?

输入:data: inhalt: [text: "hallo"]

在下面的示例中,有一个名为 impressum 的组件。 Inhalt 是动态区域。它包含不同的组件:ComponentPageText、ComponentPageInformationComponentPageArticle

这个突变

mutation 
  updateImpressum(input: data: inhalt: [text: "hallo"]) 
    impressum 
      inhalt 
        __typename
      
    
  

返回

预期类型 ImpressumInhaltDynamicZoneInput!,找到 text: \"hallo\";未找到组件。预期之一:ComponentPageText、ComponentPageInformation、ComponentPageArticle

这会返回同样的错误

mutation 
  updateImpressum(input: data: inhalt: [ComponentPageText: text: "hallo"]) 
    impressum 
      inhalt 
        __typename
      
    
  

架构自省返回


  "name": "ComponentPageText",
  "kind": "OBJECT"

结构(在评论后添加)

impressum => inhalt => [page.text, page.information, page.article]

对应

单一类型 => 动态区域 => [组件]

组件中的字段

page.text:文本page.information:标题、文本、图片page.article:与集合类型 - 文章

架构自省


  "name": "updateImpressum",
  "__typename": "__Field",
  "description": "",
  "args": [
    
      "name": "input",
      "description": "",
      "__typename": "__InputValue",
      "type": 
        "kind": "INPUT_OBJECT",
        "name": "updateImpressumInput",
        "possibleTypes": null,
        "interfaces": null,
        "inputFields": [
          
            "name": "data",
            "description": "",
            "__typename": "__InputValue"
          
        ]
      
    
  ]

【问题讨论】:

您好,能否分享一下您的组合和内容类型结构。 @JimLAURIE 我在问题中添加了上面的结构。这是你的意思吗?您需要更多信息吗? 【参考方案1】:

这是一个如何在 Strapi 中改变动态区域的示例。就我而言,我有一个名为 Tests 的集合和一个名为 New Question 的动态区域,它位于一个名为 questions-group 的组下:

mutation 
 createTest(input: data:
  title:"Test Title Here"
  questions: [
     
      __typename: "ComponentQuestionsGroupNewQuestion"
      __component: "questions-group.new-question"
      title:"What is 4 + 20?"
      correct_answer: "24"
      wrong_answer: "420"
    
  ]
  ) 
    test 
      id
    
  

您必须在动态区域子句中提供__typename:__component:

【讨论】:

这行得通。非常感谢您的回答!很抱歉回复晚了。 现在(我将 Strapi 3.6.2 与 MongoDB 一起使用)您不必再包含 __component。您只需提供__typename 即可正常工作。【参考方案2】:

你需要这样的东西来处理组件:

mutation($text: String!) 
  updateImpressum 
    impressum 
      inhalt 
        __typename
        ... on MyComponentName 
            text: $text
        
      
    
  

提示:使用 /graphql 客户端通过键入来自动完成组件类型 “……在”

提示2:使用片段

【讨论】:

感谢您的评论,但我想不通的不是突变后如何查询,而是突变本身。意思是这个字符串“updateImpressum(输入:data:inhalt:[text:“hallo”])”。如果我没有在我的问题中清楚地表达这一点,我很抱歉。

以上是关于如何:具有动态区域/组件的 Strapi GraphQL 突变的主要内容,如果未能解决你的问题,请参考以下文章

Strapi - 如何使用自定义属性扩展 graphql 类型模式?

vue js中vue路由器的动态路由与strapi headless CMS - 路由器链接和href标签抛出错误

如何使组件使用 v-for 具有动态插槽

通过 slug 获取页面和页面数据。 Strapi 和 Nuxt

Gatsby GraphQL 无法在 Strapi 的“文件”类型上查询字段“url”

如何将strapi、graphql和postgres连接在一起?