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?

0 ответов

Другие вопросы по тегам