【发布时间】:2019-11-09 23:27:11
【问题描述】:
我正在使用react-apollo 在我的 react 应用程序中管理客户端存储,因此没有后端 graphql 服务器。与apollo 相关的所有内容都在客户端运行。我将所有 UI 状态存储在 ApolloClient 的缓存中。我还在客户端定义了所有解析器。
以下是新建客户端实例的代码:
new ApolloClient({
cache,
resolvers: {
Mutation: {
...cartResolvers,
},
},
typeDefs: [typeDefs]
});
我已经阅读了这篇文章https://www.apollographql.com/docs/angular/features/cache-updates/#automatic-store-updates,关于在 apollo graphql 突变和查询中使用 ID 自动更新存储。但这似乎不起作用。我有以下查询和突变:
export const queryCart = gql`
{
cart @client {
items {
id
name
price
quantity
image
}
}
}
`;
export const addToBasket = gql`
mutation addToBasket($sku: ID!) {
addToBasket(id: $sku) @client {
items {
id
name
price
quantity
image
}
}
}
`;
我已经为该突变addToBasket 定义了解析器。
const addToBasket = (_parent: any, item: { id: string }, { cache }: ResolverCacheType): CartProps => {
...
return {
items: [ {id, name, price, quantity, image } ]
}
}
我发现即使我在解析器中返回id,缓存也没有更新,查询也没有反应。我可以通过cache.writeData 手动更新解析中的缓存数据来使其工作。
【问题讨论】:
标签: reactjs graphql apollo react-apollo apollo-client