中继/路由器登录变异?

时间:2016-05-12 17:42:07

标签: react-router graphql relayjs react-router-relay

我正在尝试实施登录变异。该变异验证提供的id_token并通过会话记录用户。突变本身有效(用GraphiQL验证),但我遇到了将它与Relay集成的问题。

当用户登录时,整个中继存储可能会被更改,因为“viewer”是根查询。但我不想在胖查询中列出我的整个查询树。能以某种方式清除整个商店会很高兴,但我看不到用react-router-relay做到这一点的方法。

接力突变:

export default class LoginMutation extends Relay.Mutation {
  getMutation() {
    return Relay.QL`mutation {login}`;
  }

  getVariables() {
    return {
      id_token: this.props.id_token
    };
  }

  getFatQuery() {
    // TODO: list everything?
    return Relay.QL`
      fragment on LoginPayload {
        viewer
      }
    `;
  }

  getConfigs() {
    return []; // TODO: not sure what to return...
  }
}

用法:

Relay.Store.commitUpdate(new LoginMutation({id_token}), {
        onSuccess: (resp) => {
          history.push('/');
        }
      });

GraphQL架构:

input LoginInput {
  id_token: String!
  clientMutationId: String!
}

type LoginPayload {
  viewer: Viewer
  clientMutationId: String!
}

type Mutation {
  login(input: LoginInput!): LoginPayload
}

interface Node {
  id: ID!
}

type Query {
  viewer: Viewer
  node(id: ID!): Node
}

type Viewer implements Node {
  id: ID!
  user: User
  ships: [Ship]
  ship(id: ID!): Ship
}

schema {
  query: Query
  mutation: Mutation
}

1 个答案:

答案 0 :(得分:0)

Dim i As Integer i = 1 While Not rs.EOF objDoc.Hyperlinks.add Anchor:=objDoc.Tables(i).Cell(2, 1).Range, _ Address:=rs("hyperlink") With objDoc.Tables(i).Cell(2, 1).Range .Collapse Direction:=wdCollapseStart .Text = "Text to Insert" & Chr(11) End With objDoc.Tables(i).Cell(2, 2).Range.Text = "" & rs("description") rs.MoveNext i = i + 1 Wend 中,当您列出fatQuery字段时,Relay会认为任何连接字段可能已更新。在某些需要参数的字段中(例如non-scalar),您可以使用(first: n)来绕过此要求。 This SO question讨论了该功能。