Мутация входа в систему реле / ​​маршрутизатора?

Я пытаюсь реализовать мутацию для входа в систему. Мутация проверяет предоставленный 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) обойти это требование. Этот ТАК вопрос обсуждает функцию.

Другие вопросы по тегам