6
我正试图为登录实现突变。突变验证提供的id_token并通过会话记录用户。这个突变本身是有效的(通过GraphiQL验证),但是我遇到了与Relay的整合问题。中继/路由器登录突变?
当用户登录时,由于“查看器”是根查询,整个中继商店可能会被更改。但我不想在胖查询中列出我的整个查询树。能够以某种方式清除整个商店会很好,但我没有看到用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
}
Relay的版本[v0.8.0](https://github.com/facebook/relay/releases/tag/v0.8.0)引入了'Relay.Environment',您可以实例化并将该实例传递给'Relay .Renderer'。尚未记录。看看这个github问题的最后几条评论:[Implement RelayStore.reset()](https://github.com/facebook/relay/issues/233)。 –