Подтвердить что ты не робот

Как отправить запрос ad-hoc с помощью Relay?

Я новичок в Relay, все еще пытаясь обернуть вокруг себя голову. Основываясь на моем понимании, Relay связывает запросы с компонентами. Таким образом, вы можете сказать, что компонент должен быть предоставлен x, y и z с сервера GraphQL. Основываясь на моем понимании, официальная библиотека react-relay отправит эти запросы в соответствующее время, вероятно, когда компонент будет отображаться.

Все это имеет смысл для явных вариантов использования, таких как просто отображение списка данных.

То, что я запутался в том, как это сделать, заключается в том, как отправить запрос, который может не попадать в категорию того, что было бы привязано к компоненту. Запрос, такой как запрос, который пытается извлечь токен сеанса аутентификации пользователя или что-то еще. Это моя текущая ситуация: я пытаюсь создать форму входа пользователя, которая извлекает токен сеанса из GraphQL. У меня есть параметризованное поле GraphQL, которое требует аргументов имени пользователя и пароля и вернет токен сеанса, если они действительны. Я просто не могу понять, как использовать Relay для запроса этого токена сеанса.

Мне просто нужно было бы отправить запрос и обработать ответ (поместите этот токен сеанса в состояние приложения React).

Любые идеи?

4b9b3361

Ответ 1

API-интерфейсы Relay в первую очередь сосредоточены на том, чтобы упростить выборку данных для компонентов, но Relay также поддерживает специальные запросы. API является относительно низкоуровневым, с различными функциями для извлечения и чтения данных. Вот пример того, как получить специальный запрос и получить доступ к ответу:

// Create a query with values for any variables:
var query = Relay.createQuery(Relay.QL`query ... `, {var: 'value'});
// Fetch any fields that have not yet been cached:
Relay.Store.primeCache({query}, readyState => {
  if (readyState.done) {
    // When all data is ready, read the data from the cache:
    var data = Relay.Store.readQuery(query)[0];
    /* access fields on `data` */
  }
});

Если данные не нужно синхронизировать с кешем ретрансляции, вы также можете использовать простой сетевой запрос (XHR, выборка и т.д.) для отправки простого строкового запроса в конечную точку GraphQL.

Ответ 2

Честно говоря, проще всего использовать отдельную библиотеку. Я использую Lokka в моих проектах node, и он прост и прост и прост.

// config
const Lokka = require('lokka').Lokka;
const Transport = require('lokka-transport-http').Transport;

const client = new Lokka({
  transport: new Transport('http://graphql-swapi.parseapp.com/')
});



// query
client.query(`
  {
    allFilms {
      films {
        ...${filmInfo}
      }
    }
  }
`).then(result => {
  console.log(result.allFilms.films);
});