Apollo-link-state: преобразователи запросов вызываются только при отсутствии кэша, как?
В документе apollo-link-state говорится: распознаватели запросов вызываются только при отсутствии кеша. Я думаю, что это заслуживает большего объяснения, я запутался.
Пожалуйста, позвольте мне представить мой вариант использования.
Это мое состояние по умолчанию (я удалил много полей, не имеющих отношения к точке):
const defaults = {
__typename: 'State',
quote: {
__typename: 'Quote',
items: []
}
}
Я хотел бы сделать этот запрос:
query getItem {
quote: {
item(id: "*******") { name quantity }
}
}
Итак, я создал этот класс:
class Quote {
constructor({ items }) {
this.__typename = 'Quote'
this.items = items
this.item = this.item.bind(this)
}
item(id) {
return this.items.filter(item => item.id === id)[0]
}
}
И это мой лучший распознаватель запросов:
(_, args, { cache }) => {
const { quote } = cache.readQuery({ query: GET_LOCAL_STATE })
return { __typename: 'State', quote: new Quote(quote) }
}
Но мой запрос getItem возвращает пустой объект {}.
Итак, давайте снова рассмотрим это предложение: "Решатели запросов вызываются только при отсутствии кеша".
Я думаю, что когда я выполняю свой запрос, в кеше находится цитата по умолчанию, поэтому нет пропуска кеша и нет поля элемента в кеше, поэтому я получаю пустой объект.
Я попытался установить новый объект Quote в качестве значения по умолчанию, поэтому мой запрос будет использовать метод item, но он не работает.
Поэтому мне интересно, есть ли способ вернуть пользовательский объект, с методами, в качестве значения поля, и использовать его метод в качестве subResolvers, как и в Apollo Server?