使用Apollo客户端查询从异步库中获取数据

时间:2018-11-13 17:49:40

标签: react-apollo apollo-client

我刚读完Apollo GraphQL网页中的tutorial,我(显然吗?)很茫然:)

我在这里是因为在用例中,我有一个客户端库(我写过,叫它InnerClient),它公开了一些内部进行grapqhl调用的方法,它没有UI。

现在,我想将该库导入一个react apollo项目(ApolloReactClient)中,并且我想了解在这种情况下如何利用Apollo Client的超能力:我没有任何查询或突变可以明确地做,我想调用我的InnerClient方法,等待响应(它们当然是异步的),然后使用Query组件返回的便捷属性(如数据,加载,错误...)在ApolloReactClient中呈现我的React组件

我读了一些有关Links的内容,也许这是正确的方法,但我不确定。

您能帮我解决这个问题吗? 您能否提供一个小例子,其中有一个由(Apollo)查询组件包装的React组件,可以像我这样从内部库中获取数据?

致谢

1 个答案:

答案 0 :(得分:1)

我认为这是做到的方式

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
  }
}

} `;

在这里定义客户端查询(请注意@client),并以此承诺以异步方式解决查询

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

希望这会有所帮助!