Apollo 3: удаление вложенного элемента из кэша

#reactjs #caching #apollo

#reactjs #кэширование #apollo

Вопрос:

У меня есть тип объекта entity , который может быть связан с другим типом объекта something через список entityInstances . Также something находится в списке внутри somethingContainer :

 query somethingContainer {
  id
  somethings {
    id
    entityInstances {
      id
      entity {
        id
      }
    }
  }
}
 

entity s могут отображаться в нескольких entityInstance s, но экземпляры уникальны для их something s, как и something s для их контейнеров.

Проблема возникает при удалении entity . Затем необходимо обновить каждый из запросов, содержащих объект (вложенный в 3 слоя), но не очевидно, какие это будут запросы.

Я изучил использование cache.modify , но не вижу, как его использовать, не зная идентификаторов соответствующих entityInstance файлов (или идентификаторов соответствующих something файлов).

Прежде чем я использовал небольшой мягкий метод удаления, в котором я использую writeFragment для установки id соответствующих entity значений null и отфильтровывания их в компонентах. Но это никогда не казалось хорошим решением, и это еще хуже с обновлением до Apollo 3 (мы регистрируем ошибку всякий раз, когда запрос или мутация не имеют id , что после обновления также регистрируется writeFragment ).

Другой вариант — сделать что-то вроде повторного запуска всех somethingContainer запросов, но это может стать дорогостоящим.

Есть идеи?