在查询中找到@client指令,但未指定ApolloClient解析器

时间:2019-07-16 20:52:25

标签: apollo react-apollo apollo-client

操作系统:Windows 10 Pro
阿波罗客户端:2.6.3 阿波罗升压:0.1.16

谁能解释为什么我收到以下错误消息?

  

在查询中找到@client指令,但没有ApolloClient解析器   指定。这意味着已经对ApolloClient本地解析程序进行了处理   禁用,@ client指令将传递到您的链接   链。

当我如下定义我的ApolloClient时:

return new ApolloClient({
    uri: process.env.NODE_ENV === 'development' ? endpoint : prodEndpoint,
    request: operation => {
      operation.setContext({
        fetchOptions: {
          credentials: 'include',
        },
        headers: { cookie: headers && headers.cookie },
      });
    },
    // local data
    clientState: {
      resolvers: {
        Mutation: {
          toggleCart(_, variables, { cache }) {
            // Read the cartOpen value from the cache
            const { cartOpen } = cache.readQuery({
              query: LOCAL_STATE_QUERY,
            });
            // Write the cart State to the opposite
            const data = {
              data: { cartOpen: !cartOpen },
            };
            cache.writeData(data);
            return data;
          },
        },
      },
      defaults: {
        cartOpen: false,
      },
    },
  });

1 个答案:

答案 0 :(得分:1)

来自docs

  

如果您希望将本地状态处理功能与Apollo Client <2.5集成在一起,请参阅我们(现已弃用)的apollo-link-state项目。从Apollo Client 2.5开始,本地状态处理已纳入核心,这意味着不再需要使用apollo-link-state

clientState配置选项仅与apollo-link-state一起使用。您需要将解析器直接添加到配置中,如文档所示:

new ApolloClient({
  uri: '/graphql',
  resolvers: { ... },
})

还要注意,不再有defaults选项-应该通过直接在缓存实例上调用writeData来初始化缓存(请参见here)。

我建议您浏览最新的文档,并避免使用外部来源的任何示例(例如现有的存储库或教程),因为这些示例可能已过时。