Перезапись запросов с отсутствующими полями в кэше Apollo - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть ситуация, когда я иногда хочу запросить список многих объектов с несколькими полями, а иногда только один объект со многими полями.В качестве примера рассмотрим эти два запроса:

  • Запрос с большим количеством объектов и несколькими полями:

    query {
      object(many=true) {
        id
        name
      }
    }
    
  • Запрос содин объект и много полей:

    query {
      object(many=false) {
        id
        ... (many other fields)
      }
    }
    

Я не хочу запрашивать больше полей, чем необходимо в первом запросе, потому что это приведет к запросам с большим количеством данных (в противном случае я мог бы сделать поля идентичными, например, используя fragment, решая мою проблему).

Проблема заключается в следующем: данные, хранящиеся в кэше, нормализуются и хранятся в соответствии с __typename и id,Это означает, что запросы или атомы запросов будут перезаписывать друг друга, если они совпадают.Поэтому, если второй запрос выполняется последним, элемент в базе данных не имеет поля name, которое требуется компонентам, связанным с первым запросом.

Самое простое решение - просто запросить name во второмзапрос также.Проблема в том, что это кажется хрупким и подверженным ошибкам;Например, можно создать третий запрос и забыть спросить name.

Другой вариант - сделать так, чтобы они имели разные __typename, то есть дифференцировать их на бэкэнде.Но это кажется искусственным;запросы на самом деле имеют дело с объектами одного и того же типа.

Есть ли канонический способ решения этой проблемы?

...