Краткий обзор моей проблемы
У меня есть запрос getTracks
, который будет извлекать данные отслеживания и принимает несколько аргументов для сортировки / фильтрации (предел, смещение, поиск, сортировка, порядок).К сожалению, Apollo кэширует все это по отдельности, поэтому, когда элемент удаляется в одном представлении, пользователь изменяет порядок сортировки, а удаленный элемент остается там (потому что он находится в кеше для другого набора аргументов).
Подробности
Это запрос getTracks
вместе с соответствующим типом ввода (в моей серверной схеме AppSync):
input SelectOptions {
limit: Int
offset: Int
sort: String
order: String
search: String
}
type Query {
getTracks(options: SelectOptions): TrackList!
}
type TrackList {
total: Int!
items: [Track!]!
}
В клиенте Vue запрос выглядит следующим образомthis:
query GetTracks($options: SelectOptions) {
getTracks(options: $options) {
total
items {
id
name
runtime
createdAt
metadata {
trackNum
trackName
artistName
albumName
year
}
}
}
}
При первом отображении таблицы элементы загружаются и отображаются нормально (по умолчанию создается порядок сортировки At / desc).Если я сортирую по созданному At / asc, то делается сетевой запрос на получение результатов, и они отображаются нормально.Теперь, если я удаляю одну из записей, а затем снова сортирую по созданному Att / desc, удаленный элемент отображается, поскольку он вытаскивает его из кэша.
Нет ли в Apollo способа, чтобы он разумно прошели удалить (или добавить / изменить) элементы из кэша, даже если запрос имеет разные аргументы?Я попробовал директиву @connection
, как описано здесь , но это просто сделало так, что сортировка таблицы не имела никакого эффекта (она вообще не будет извлекаться с сервера).
IЯ полностью застрял и готов полностью отключить кэширование, потому что, похоже, оно не работает в реальных сценариях.Как я могу сохранить политику по умолчанию cache-and-network
, но заставить мои таблицы работать правильно при изменении данных?