订阅一个 GraphQL 项

4
使用 GraphCool 作为我的 GraphQL 后端,我想知道如何订阅只给定 ID 的单个项。我一直在查看文档并尝试使用过滤器,但仍然无法弄清楚。如果我想订阅所有项的变化,我了解需要这样做:
subscription {
  Photo{
    node {
      id
      title
      url
    }
  }
}

我该如何使用给定的ID来听取一个项目?
1个回答

1

Simple API中已知的过滤功能同样适用于Subscription API。您可以在filter对象内使用node属性。以下是一些订阅过滤器的示例:

订阅创建的照片

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

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

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

当监听更新时,我们可以使用updatedFields_containsupdatedFields_contains_everyupdatedFields_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
    }
  }
}

1
您的回答非常有帮助。谢谢! :) - Funk Soul Ninja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接