Я пытаюсь использовать GraphQL (с Gatsby), извлекая данные из пользовательского API. API содержит данные, поступающие от CMS, а основное содержимое - это массив объектов. Каждый объект внутри этого массива является компонентом с такими полями, как текст заголовка, основной текст, изображения и т. д.
В GraphQL я запрашиваю все страницы для каждого компонента и его подполей. GraphQL возвращает правильное количество компонентов для каждой страницы, но для каждого компонента он возвращает все возможные компоненты и связанные подполя. Это означает, что я получаю много возвращенных объектов null.
Вот мой запрос GraphQL: (contentBlock - это то, что мы называем компонентом в cms)
query Demo {
allPages {
Pages {
title
contentBlocksArray {
contentBlock {
introText{
body
}
}
}
}
}
}
Вот что возвращается:
"allPages": {
"Pages": [
{
"title": "Contact",
"contentBlocksArray": [
{
"contentBlock": {
"introText": {
"body": "Get in touch with us"
}
}
},
{
"contentBlock": {
"introText": null
}
},
{
"contentBlock": {
"introText": null
}
},
{
"contentBlock": {
"introText": null
}
}
]
},
Я пробовал использовать такие директивы:
allPages {
Pages {
title
contentBlocksArray {
contentBlock {
introText @skip(if: false) {
body
}
}
}
}
}
}
Но это ничего не дало. Однако, если я переключил его на @skip(if: true), результат был неожиданным. Он вернул все contentBlock на странице как пустые объекты, даже если у introText была основная копия. В идеале я хотел бы видеть объект introText, только если body не был null.
Поскольку @skip(if:true) пропустил все introText, даже если его значение равно null, я пришел к выводу, что GraphQL интерпретирует null == true, но я уверен, что что-то упустил.


Я думаю, вы неправильно понимаете директиву skip. Эта директива выполняется / оценивается перед выполнением запроса. Вы можете использовать его для изменения статических запросов в зависимости от переменных. Концепция статических запросов важна по разным причинам, там директивы дают вам возможность вносить незначительные корректировки на более позднем этапе.
Напротив, он не работает с данными, которые возвращаются сами по себе. Вы можете узнать больше о директивах запросов здесь: http://graphql.org/learn/queries/#directives