Использование Apollo Client Query для извлечения данных из асинхронной библиотеки - PullRequest
0 голосов
/ 13 ноября 2018

Я только что закончил читать учебник на веб-странице Apollo GraphQL, и я (очевидно?) Ошеломлен:)

Я здесь, потому что в моем случае использования у меня есть клиентская библиотека (которую я написал, давайте назовем ее InnerClient), которая предоставляет некоторые методы для внутренних вызовов grapqhl, у нее нет пользовательского интерфейса.

Теперь я хотел импортировать эту библиотеку в реактивный проект apollo (ApolloReactClient), и я хотел понять, как использовать суперспособности Apollo Client в этом случае: у меня нет запросов или мутаций, которые нужно делать явно, я хочу вызовите мои методы InnerClient, дождитесь ответа (они, конечно, асинхронные), а затем отобразите мои компоненты React в ApolloReactClient, используя удобные свойства, которые возвращает компонент запроса (например, данные, загрузка, ошибка ...)

Я читал кое-что о Ссылки и, возможно, это правильный путь, но я совсем не уверен.

Можете ли вы помочь мне решить эту проблему? Не могли бы вы привести небольшой пример, в котором у вас есть компонент React, обернутый компонентом (Apollo) Query, который извлекает данные из внутренней библиотеки, как в моем случае?

Привет

1 Ответ

0 голосов
/ 13 ноября 2018

Я думаю, что это способ сделать это

https://github.com/apollographql/apollo-link-state/tree/master/examples/async

Редактировать (добавить дополнительную информацию): в основном это возможно с apollo-link-state, это позволяет комбинировать вашисостояние клиента с определителями, которые работают с мутациями и запросами, специально разработанными для него с помощью директивы @client.

 const client = new ApolloClient({
  link: withClientState({ resolvers }),
  cache: new InMemoryCache(),
 });

Здесь вы говорите, что Apollo должен использовать для запросов resolvers и передачу им состояния клиента.

const GET_CURRENT_POSITION = gql`
 query getCurrentPosition($timeout: Int) {
  currentPosition(timeout: $timeout) @client {
  coords {
    latitude
    longitude
  }
}

} `;

Здесь вы определяете запрос для клиента (note @client), и запрос выполняется асинхронно с этим обещанием

   const getCurrentPosition = options => {
    return new Promise((resolve, reject) => {
     navigator.geolocation.getCurrentPosition(resolve, reject, options);
    });
   };

Надеюсь, это поможет!

...