Два запроса используют один и тот же тип с разными полями в GraphQL

#graphql #apollo-client

Вопрос:

Я довольно новичок в GraphQL и клиенте Apollo.

На данный момент в моем API GraphQL есть запрос такого типа:

 type Directory {  name: String  id: String  parentId: String  files: [PaginatedFiles]  children: [Directory]  ... }  

Первоначально у меня был один запрос для извлечения всех полей из приведенного выше типа, но через некоторое время я решил реализовать бесконечную прокрутку (извлекает 20 файлов каждый раз, когда пользователь прокручивает страницу) для файлов (потому что иногда в каталоге до 1000 файлов).

Чтобы использовать fetchMore функцию крючков Apollo, мы решили создать 2 запроса, которые используют один и тот же тип (Каталог), но имеют разные поля:

 query getDirectory($id: String!) {  directory(id: $id) {  name  id  parentId  children  } }  query getDirectoryFiles($directoryId: String!, $after: String) {  directory(id: $directoryId) {  files(after: $after) {  after  items {  ...FileBaseFields  }  }  } }  

В этом случае graphql-codegen создает крючки для меня, поэтому я использую их так:

 const [fetchDirectory, { loading: directoryLoading, data: directory }] =   useFetchDirectoryLazyQuery()  const [fetchDirectoryFiles, {  loading: directoryFilesLoading,  data: directoryFiles,  fetchMore, }] = useFetchDirectoryFilesLazyQuery()  

С таким подходом я могу использовать fetchMore , предоставляя ему переменные («directoryId» и «после»).

Нормально ли иметь два запроса, которые используют один тип, или мне следует создать два отдельных типа (обработчики)?

Комментарии:

1. все в порядке, apollo [как нормализующий кэш] подключит реквизиты из обеих записей каталога [по идентификатору] … вставка debugger в код, изучение записей кэша клиента apollo