В моем приложении есть предупреждения.Частичная схема:
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
для манипулирования кешем.Так что я немного застрял и не нашел никаких руководств в документах.
Есть ли какие-либо рекомендации по решению этой проблемы?