在查询中找到 @client 指令,但未指定 ApolloClient 解析器
Posted
技术标签:
【中文标题】在查询中找到 @client 指令,但未指定 ApolloClient 解析器【英文标题】:Found @client directives in a query but no ApolloClient resolvers were specified 【发布时间】: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,
,
,
);
【问题讨论】:
【参考方案1】:来自docs:
如果您有兴趣将本地状态处理功能与 Apollo Client
clientState
配置选项仅与apollo-link-state
一起使用。您需要将解析器直接添加到配置中,如文档中所示:
new ApolloClient(
uri: '/graphql',
resolvers: ... ,
)
还要注意,不再有defaults
选项——应该通过直接在缓存实例上调用writeData
来初始化缓存(请参阅here)。
我建议阅读最新的文档并避免使用任何来自外部来源的示例(例如现有的 repos 或教程),因为这些可能已经过时了。
注意:从 3.0 版开始,writeData
被删除,取而代之的是 writeFragment
和 writeQuery
。
【讨论】:
我不明白阿波罗文档中的一些内容:局部变量来自哪里?链接: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
)并收到此错误。还需要什么额外的步骤吗?以上是关于在查询中找到 @client 指令,但未指定 ApolloClient 解析器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apollo 工具为查询生成 Typescript 类型,包括 Apollo @client 和 @rest 指令?