Мутация входа в систему реле / маршрутизатора?
Я пытаюсь реализовать мутацию для входа в систему. Мутация проверяет предоставленный 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
}
1 ответ
В fatQuery
когда вы перечисляете non-scalar
Relay будет предполагать, что любое связанное поле могло обновиться. В определенных полях, которые требуют аргументов (например, (first: n)
), ты можешь использовать @relay(pattern: true)
обойти это требование. Этот ТАК вопрос обсуждает функцию.