Я использую react-apollo
для управления клиентским хранилищем в моем приложении реагирования, поэтому нет внутреннего сервера graphql.Все что связано с apollo
выполняется на стороне клиента.Я храню все состояние пользовательского интерфейса в кэше ApolloClient
.И я также определяю все распознаватели на стороне клиента.
Ниже приведен код для нового экземпляра клиента:
new ApolloClient({
cache,
resolvers: {
Mutation: {
...cartResolvers,
},
},
typeDefs: [typeDefs]
});
Я прочитал эту статью https://www.apollographql.com/docs/angular/features/cache-updates/#automatic-store-updates об автоматическом обновлении хранилища с использованием ID
в мутации apollo graphql изапрос.Но это не похоже на работу.У меня есть ниже запрос и мутация:
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
.