删除变异的乐观更新

时间:2016-04-16 12:48:41

标签: graphql relayjs

我正在写一个删除突变。该变异应删除Key节点并更新viewer的{​​{1}}集合(我正在使用中继式集合:keys

根据建议here,我使用viewer { keys(first: 3) { edges { node { ... }}}}配置来简化,它实际上正在运行:

FIELDS_CHANGE

现在,我应该如何为此写一个乐观的变异?我尝试了不同的方法,但都没有。

1 个答案:

答案 0 :(得分:2)

Relay中的乐观更新只是模拟操作成功后服务器将返回的内容。在您的情况下,您将删除一个键,这意味着结果将是没有该键的对象。

getOptimisticUpdate() {
  return {
    viewer: {
      id: this.props.viewer.id,
      keys: {
        edges: this.props.viewer.keys.edges.filter((keyEdge) => key.node.id !== this.props.id)
      }
    }
  };
}

您还需要在片段中包含密钥,以便它们可以在变异中使用。

static fragments = {
  viewer: () => Relay.QL`
    fragment on Viewer { id, keys { edges(first: 3) { node { id } }}
  `,
};

这种方法的问题在于它依赖于你的突变来了解你当前的密钥分页是什么。如果你一次在整个Connection上运行,那很好,但是如果你使用Relay分页,你应该考虑使用其他的变异操作。

NODE_DELETE,可以从中继存储中删除所有出现的密钥,或者您可以使用RANGE_DELETE仅将其从当前连接中删除。