【问题标题】:Subscribe to one GraphQL item订阅一个 GraphQL 项目
【发布时间】:2018-03-12 20:56:04
【问题描述】:

将 GraphCool 用于我的 GraphQL 后端,我想知道如何在给定 ID 的情况下仅订阅单个项目。我一直在查看文档并尝试使用过滤器,但我仍然无法弄清楚。如果我想订阅所有项目变更,我知道我必须这样做:

subscription {
  Photo{
    node {
      id
      title
      url
    }
  }
}

如何收听具有给定 ID 的项目?

【问题讨论】:

    标签: graphql graphcool graphql-subscriptions


    【解决方案1】:

    filter capabilities known from the Simple API 也可以在订阅 API 中使用。您可以为此使用filter 对象内的node 属性。以下是订阅过滤器的一些示例:

    订阅创建的照片

    使用mutation_in,我们可以决定是否要监听创建、更新或删除的事件(或它们的混合):

    subscription {
      Photo(filter: {
        mutation_in: [CREATED]
      }) {
        node {
          id
          title
          url
        }
      }
    }
    

    订阅已创建的照片并更新特定字段的照片

    在监听更新时,我们可以进一步指定只监听特定字段的更新,使用updatedFields_contains、updatedFields_contains_every和updatedFields_contains_some:

    subscription {
      # we can only use `updatedFields_x` filters together with `UPATED`
      # so we use OR
      Photo(filter: {
        OR: [{
          mutation_in: [UPDATED]
          updatedFields_contains: "title"
        }, {
          mutation_in: [CREATED]
        }]
    
      }) {
        previousValues {
          title # contains old title
        }
        node {
          id
          title # contains new title
          url
        }
      }
    }
    

    订阅某张照片的更新

    对于所有订阅查询,我们可以使用node进一步细化订阅条件。这与用于allPhoto 的过滤器相同,例如:

    subscription updatedPhoto($id: ID!) {
      Photo(filter: {
        mutation_in: [UPDATED]
        node: {
          id: $id
        }
      }) {
        previousValues {
          title # contains old title
        }
        node {
          id
          title # contains new title
          url
        }
      }
    }
    

    【讨论】:

    • 你的回答真的很有帮助。谢谢! :)
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2017-09-19
    • 2019-12-02
    • 2021-10-09
    • 2021-03-17
    • 2021-12-19
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多