Apollo HttpLink 异步

Sam*_*mmy 5 asynchronous apollo react-apollo apollo-client

对于以下代码:

const apolloClient = new ApolloClient({
  cache: new InMemoryCache(),
  link: new HttpLink({
    uri: endpoint,
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`
    }
  })
});
Run Code Online (Sandbox Code Playgroud)

我需要异步endpoint获取token。我该怎么做?

谢谢

Dan*_*den 6

您可以使用apollo-link-context修改您的请求。如果您没有在每个请求中获取这些值,您可以缓存所示的值。

let token
let uri
const contextLink = setContext(async () => {
  if (!token) {
    token = await getTokenAsync()
  }
  if (!uri) {
    uri = await getUriAsync()
  }

  return { uri, token }
});

const client = new ApolloClient({
  ...
  link: ApolloLink.from([
    contextLink,
    httpLink,
  ])
})
Run Code Online (Sandbox Code Playgroud)

以上是动态设置这些参数的优选方式。或者,您可以在渲染 ApolloProvider 之前获取令牌和 URI,然后根据这些值动态创建客户端实例。