我可以覆盖组件中单个查询的 Apollo Client 标头吗?
Posted
技术标签:
【中文标题】我可以覆盖组件中单个查询的 Apollo Client 标头吗?【英文标题】:Can I override Apollo Client headers from individual queries in my components? 【发布时间】:2020-01-13 16:06:25 【问题描述】:当我初始化我的 Apollo 客户端时,我创建了一个带有标题 hello: "world"
的 Apollo 链接。有没有办法使用钩子覆盖组件中的hello
标头值?我认为这会起作用,但它仍然使用 Client 标头:
useQuery(<QUERY>,
context:
headers:
hello: "Canada"
)
【问题讨论】:
【参考方案1】:我在尝试覆盖请求的授权标头时遇到了同样的问题。当我在链接中设置标题时,我通过传播operation.getContext().headers
解决了这个问题。代码:
const authLink = new ApolloLink((operation, forward) =>
operation.setContext(
headers:
authorization: authToken,
...operation.getContext().headers,
,
);
return forward(operation);
);
那么您包含的代码应该可以按预期工作。
【讨论】:
【参考方案2】:您的代码似乎正确。经过一些测试后,似乎无法覆盖现有的标头。
const data, loading, error = useQuery(ALL_GAMES,
context: headers: authentication: 'some value', test: 'some value'
);
也许如果您将一个全新的客户端传递给 useQuery - 您可以使用工厂函数创建客户端
【讨论】:
以上是关于我可以覆盖组件中单个查询的 Apollo Client 标头吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何测试graphql apollo组件?如何在 compose() 中获得完整的覆盖?