Запрос необязательных локальных полей с помощью graphql - PullRequest
1 голос
/ 30 сентября 2019

В GraphQL мне нравится запрашивать весь массив со всеми полями, которые есть только в некоторых элементах массива.

Предположим, у меня есть следующие данные и локальный клиент:

// data1.json
[
  {
    "type": "title",
    "description": "Title!"
  },
  {
    "type": "person",
    "description": "He has been working in this office for 10 years."
    "name": "Thomas"
    "age": "35"
  },
  {
    "type": "office",
    "description": "Engineering"
    "size": "90"
    "budget": "1500000"
  },
]
import data1 from './data1.json'
import data2 from './data2.json' // same structure to data1
... // other imports

const client = new ApolloClient({
  cache: new InMemoryCache()
});

client.cache.writeData({
  data: {
    departments: [
      {
        name: 'departmentOne',
        data: data1.map(item => ({ ...item, __typename: 'element' })),
        __typename: 'department'
      },
      {
        name: 'departmentTwo',
        data: data2.map(item => ({ ...item, __typename: 'element' })),
        __typename: 'department'
      }
    ],
    __typename: 'departments'
  }
});

Затем, в одном из моих компонентов, как мне получить все элементы в отделах?

Когда я запрашиваю это, это просто работает:

{
  departments @client {
    name
    data {
      type
      description
      __typename
    }
    __typename
  }
}

Носледующий запрос ничего не даст:

{
  departments @client {
    name
    data {
      type
      description
      name
      age
      size
      budget
      __typename
    }
    __typename
  }
}

Я полагаю, мне нужно добавить локальный преобразователь или typeDefs для этой цели, но как бы это выглядело?

Во-первых, яне уверен, что кеш имеет весь массив. Поскольку некоторые поля (например, «имя», «возраст» и другие) отсутствуют в каком-либо элементе, может ли он автоматически пропустить данные?

...