GraphQL:运行时未触发订阅

GraphQL:运行时未触发订阅,graphql,graphcool,Graphql,Graphcool,所以,我正在测试GraphTool上的订阅,希望您能澄清一下它们到底是如何工作的 我在评论文章中有一对多的关系: 模式 type Posts{ 描述:字符串! 评论:[评论!]!@关系(名称:“PostsOnComments”) createdAt:DateTime! displaysrc:String! id:id! 喜欢:Int 更新日期:日期时间! } 类型注释{ createdAt:DateTime! id:id! posts:posts@relation(名称:“PostsOnCom

所以,我正在测试GraphTool上的订阅,希望您能澄清一下它们到底是如何工作的

我在评论文章中有一对多的关系:

模式

type Posts{
描述:字符串!
评论:[评论!]!@关系(名称:“PostsOnComments”)
createdAt:DateTime!
displaysrc:String!
id:id!
喜欢:Int
更新日期:日期时间!
}
类型注释{
createdAt:DateTime!
id:id!
posts:posts@relation(名称:“PostsOnComments”)
文本:字符串!
更新日期:日期时间!
用户:字符串!
}
与订阅一起

subscription CreatedDeletedComments {
    Comments(
    filter: {
      mutation_in: [CREATED, DELETED]
    }
  ) {
    mutation
    node {
      id
      user
      text
    }
  }
}
您正在订阅正在创建或删除的注释节点。但是,使用mutation
removeFromPostsOnComments
,您不会删除任何注释节点。相反,您只是在删除帖子和评论之间的连接

您可以调整您的变异请求以完全删除评论,而不是将其与帖子断开连接:

return this.props.client.mutate({
  mutation: gql`
    mutation removeComment ($cid: ID!) {
      deleteComment(id: $cid) {
        id
      }
    }
  `,
  variables: {
    "cid": commentID
   },
  // forceFetch: true,
})
如果您不想完全删除评论,但仍想将其隐藏在应用程序中,您可以使用一个布尔字段
deleted
,作为软删除标记

然后,您可以订阅
UPDATED
注释,而不是
DELETED
注释,并检查字段
DELETED
是否已更新。有关如何使用
更新字段执行此操作的更多信息,请参阅


关系订阅也已经完成。

完美。我对deleteComments的唯一问题是与我的UI、反应式缓存有关,而不是更新以反映更改。我如何重构updateQueries(请参阅我的更新问题)以使用
this.props.client.mutate
(我是从onClick事件触发的),因为我的根查询(如Apollo devTools中所描述的)是
allPostses
?您能否就此单独发布一个问题?总的来说,现在似乎推荐使用
update
,而不是使用
updateQueries
。提交了新问题。removeFromPostsOnComments没有实际删除注释节点是否有技术原因?删除两个节点之间的连接(
removeFromPostsOnComments
在本例中)和删除节点之间存在差异。有时你需要两者中的一个,有时你两者都需要。因此,让原子操作可用是有意义的,并且仍然允许您:)