我正在尝试实现一个用于登录的变异。突变验证所提供的id_token,并通过会话使用户登录。变异本身是有效的(用GraphiQL验证),但我在将它与中继集成时遇到了问题。
当用户登录时,整个中继存储可能会被更改,因为"viewer“是根查询。但是我不想在fat查询中列出我的整个查询树。如果能以某种方式清空整个商店就好了,但我看不到使用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
}发布于 2017-01-27 23:44:38
在fatQuery中,当您列出non-scalar字段时,中继将假定任何连接的字段都可能已更新。在某些需要参数的字段中(例如,(first: n)),您可以使用@relay(pattern: true)来绕过此要求。This SO question讨论了这个特性。
https://stackoverflow.com/questions/37193982
复制相似问题