如何解决Apollo batch http ( apollo-link-batch-http ) 调用会创建多个批次而不是一个批次
注意,我是 React 和 Apollo (GraphQl) 的新手。
目前,我的 React 应用程序正在对端点 /api/graphql
进行 GraphQl 调用,并且有 9 个单独的 http 调用(graphql 查询)从 React --> Rails 端点获取数据。
我试图在服务器端和客户端同时使用 Batching
,但在客户端实现预期结果的同时遇到了问题,这样我就可以将请求数从 9 减少到 1。
在下面的 index.js
... 每个 Provider
包含一个 graph ql
查询,我的目的是对所有查询进行批处理。
ReactDOM.render(
<AppErrorBoundary client={getErrorClient()}>
<AppStateProvider>
<ApolloProvider client={apolloClient}>
<UserProvider>
<SiteProvider>
<I18nProvider>
<SiteStyleProvider>
<ThemeProvider>
<CartProvider>
<FeatureFlagsProvider>
<PaymentMethodProvider>
<App />
</PaymentMethodProvider>
</FeatureFlagsProvider>
</CartProvider>
</ThemeProvider>
</SiteStyleProvider>
</I18nProvider>
</SiteProvider>
</UserProvider>
</ApolloProvider>
</AppStateProvider>
</AppErrorBoundary>,document.getElementById('root'),);
在下面的代码段中,您可以看到我在哪里初始化了 BatchHttpLink
import { BatchHttpLink } from 'apollo-link-batch-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloClient } from 'apollo-client';
import { onError } from 'apollo-link-error';
const cache = new InMemoryCache({});
const httpLink = new BatchHttpLink({
uri: '/api/graphql',credentials: 'same-origin',batchKey: (operation: Operation) => operation.operationName.endsWith('Query') ? 'batch1' : 'batch2',});
const errorLink = onError(({ networkError = {} }) => {
if (networkError.statusCode === 401) {
return false;
}
return false;
});
const link = errorLink.concat(httpLink);
export const apolloClient = new ApolloClient({
link,cache: cache.restore(window.__APOLLO_CLIENT__),});
export default apolloClient;
预计只会看到 1 个 graphql 批量查询……但是很少看到图形查询在进行。
请注意,有些 graphql
查询包含 4 个查询,有些包含 1 个查询。
我还尝试了 BatchMax
、BatchInterval
和 BatchKey
的所有组合来进行单个批量调用.. 但到目前为止没有运气。
试图了解这里发生了什么......
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。