GraphQL интерпретирует null как правдивый? - PullRequest
0 голосов
/ 11 мая 2018

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

1 Ответ

0 голосов
/ 14 мая 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...