【问题标题】:Found @client directives in a query but no ApolloClient resolvers were specified在查询中找到 @client 指令,但未指定 ApolloClient 解析器
【发布时间】:2019-11-25 15:54:40
【问题描述】:

操作系统:Windows 10 专业版
阿波罗客户端: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,
      },
    },
  });

【问题讨论】:

    标签: apollo react-apollo apollo-client


    【解决方案1】:

    来自docs

    如果您有兴趣将本地状态处理功能与 Apollo Client

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

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

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

    我建议阅读最新的文档并避免使用任何来自外部来源的示例(例如现有的 repos 或教程),因为这些可能已经过时了。

    注意:从 3.0 版开始,writeData 被删除,取而代之的是 writeFragmentwriteQuery

    【讨论】:

    • 我不明白阿波罗文档中的一些内容:局部变量来自哪里?链接:local.concat(http) => apollographql.com/docs/angular/basics/local-state
    • @JoeAllen 文档示例已过时——没有理由再使用apollo-link-state。在该示例中,您只需使用 HttpLink。
    • 嘿,在apollographql.com/docs/react/data/local-state/… 下的文档中,它说您仍然可以使用 writeData 来初始化缓存。这也过时了吗?
    • @Spray'n'Pray 您需要在页面左上角选择正确版本的文档。
    • 我使用的是apollo-client 版本2.6.8(即> 2.5)并收到此错误。还需要什么额外的步骤吗?
    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多