我可以从组件中的单个查询覆盖 Apollo Client headers 吗?

Can I override Apollo Client headers from individual queries in my components?

当我初始化我的 Apollo 客户端时,我用 header hello: "world" 创建了一个 Apollo Link。有没有办法使用挂钩覆盖组件的 hello header 值?我认为这可行,但它仍然使用客户端 header:

useQuery(<QUERY>,{
    context:{
        headers:{
            hello: "Canada"
        }
    }
})

您的代码似乎是正确的。在做了一些测试后,似乎无法覆盖现有的 headers.

  const { data, loading, error } = useQuery(ALL_GAMES, {
    context: { headers: { authentication: 'some value', test: 'some value' } }
  });

也许如果您将一个全新的客户端传递给 useQuery - 您可以使用工厂函数创建客户端

我 运行 在尝试覆盖请求的授权 header 时遇到了同样的问题。当我在 link 中设置 header 时,我通过传播 operation.getContext().headers 解决了这个问题。代码:

const authLink = new ApolloLink((operation, forward) => {
    operation.setContext({
      headers: {
        authorization: authToken,
        ...operation.getContext().headers,
      },
    });

    return forward(operation);
  });

那么您包含的代码应该会按预期工作。