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