Интерпретирует ли GraphQL null как истину?

Я пытаюсь использовать 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, но я уверен, что что-то упустил.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
121
1

Ответы 1

Я думаю, вы неправильно понимаете директиву skip. Эта директива выполняется / оценивается перед выполнением запроса. Вы можете использовать его для изменения статических запросов в зависимости от переменных. Концепция статических запросов важна по разным причинам, там директивы дают вам возможность вносить незначительные корректировки на более позднем этапе.

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

Другие вопросы по теме