Кэш разбиения на страницы Apollo не объединяет дополнительные выборки

#pagination #apollo

#пагинация #аполлон

Вопрос:

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

 const PAGINATE = gql`  query test($first: Int!, $after: String) {  books(first: $first, after: $after) {  totalCount  pageInfo {  hasNextPage  hasPreviousPage  startCursor  endCursor  }  edges {  node {  title  id   author {  name  id  }  }  }  }  } `  

и вот код для работы с разбиением на страницы (я использую react):

 { data?.books?.pageInfo?.hasNextPage amp;amp;  (  lt;button  onClick={() =gt; {  fetchMore({  variables: {  first: 2,  after: data.books.pageInfo.endCursor  }  });  }}  gt;  Load More  lt;/buttongt;  )  }  

Так что все это работает хорошо, и там, где у меня куча проблем, находится файл кэша. Я не могу понять, почему это не работает. Когда страница загружается, появляются две карточки с надписями «книга 1» и «книга 2». Когда я нажимаю на кнопку загрузить больше, появляются две карточки, на которых показана книга 3, книга 4, но они заменяют книгу 1 и книгу 2.

вот код кэша:

 export const cache = new InMemoryCache({  typePolicies: {  Query: {  fields: {  books: {  keyArgs: false,    merge(existing, incoming) {  let books = [];   if (existing?.books) {  books = [...books, ...existing.books]  }    if (incoming?.edges) {  books = [...books, ...incoming.edges]  }   return {  ...incoming,  books  }  }    }  }  }  }  });  

Опять же, здесь все работает, я просто не могу понять, почему следующие два элемента функции fetchMore заменяют последние два, а не добавляются. Здесь используется оператор распространения, поэтому я не понимаю, в чем проблема.