Как вернуть частичные типы с Apollo - PullRequest
0 голосов
/ 29 апреля 2019

В моем приложении есть предупреждения.Частичная схема:

type Alert {
  id: ID!
  users: [User]
}

type User {
  id
  username
  ... many more calculated fields
}

Каждое предупреждение может возвращать список User с.Этот тип User требует больших вычислительных затрат, и нам нужно всего лишь несколько пользовательских полей для отображения в предупреждении.Однако, если мы только частично создадим пользовательский объект, Apollo будет кэшировать эти частичные пользовательские объекты и разбивать другие части приложения, которые зависят от «завершенных» User объектов.Чтобы избежать этого, потребуется fetchPolicy: "no-cache", и я бы хотел сохранить это кэширование.

Поэтому я стараюсь не возвращать целые User объекты только для поддержки Alert.Я столкнулся с этой проблемой и с другими типами, и изо всех сил пытаюсь найти лучший способ для этого.Единственное решение, которое я предложил, - это создание «частичных типов», которые будут отдельными типами с подмножеством полей.Например:

type Alert {
  id: ID!
  users: [PartialUser]
}    

type PartialUser {
  id
  username
  name
}

Это кажется хакерским и, как будто это нарушает принципы DRY.

Другим способом может быть ручное обновление кэша после запроса.Это позволит избежать кеширования частичных User объектов, но все равно будет выглядеть хакерским.Я также думаю, что только мутации поддерживают метод options.update для манипулирования кешем.Так что я немного застрял и не нашел никаких руководств в документах.

Есть ли какие-либо рекомендации по решению этой проблемы?

...