Можно ли использовать динамические имена псевдонимов запросов в GraphQL? - PullRequest
0 голосов
/ 09 ноября 2018

Я сейчас работаю над сайтом документации Gatsby. Одна конкретная страница извлекает содержимое различных файлов README для компонентов HTML / CSS, которые сгруппированы в три различные категории на основе поиска регулярных выражений их локальной структуры пути к файлу. В настоящее время я использую 3 отдельных запроса с псевдонимами для получения очень похожих данных, и DRY-кодировщик во мне считает, что это возможно с помощью переменной типа $ group (которая заменит атомы, молекулы и организмы в приведенном ниже коде) или что-то подобное. Поскольку я новичок в GraphQL, я не уверен, возможно ли это, и я не могу найти никого, кто бы делал это онлайн. Вот что у меня есть:

export const pageQuery = graphql`
  query($path: String!) {
    pageData: 
      markdownRemark(fields: { slug: { eq: $path } }) {
        html
        fields {
          slug
          title
        }
        fileAbsolutePath
      }


    atoms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-atoms/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }

    molecules:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-molecules/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }
    organisms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-organisms/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }
  }
`;

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете определить фрагменты для использования в ваших запросах. Это позволяет вам определить набор выбора один раз, а затем использовать его, просто ссылаясь на имя фрагмента. Обратите внимание, что вам нужно знать имя типа, для которого вы указываете набор выбора.

export const pageQuery = graphql`
  query($path: String!) {
    pageData: 
      markdownRemark(fields: { slug: { eq: $path } }) {
        html
        fields {
          slug
          title
        }
        fileAbsolutePath
      }

    atoms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-atoms/"}}) {
        ...MarkdownRemarkFields
      }

    molecules:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-molecules/"}}) {
        ...MarkdownRemarkFields
      }
    organisms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-organisms/"}}) {
        ...MarkdownRemarkFields
      }
  }

  fragment MarkdownRemarkFields on MarkdownRemarkConnection {
    edges {
      node {
        fields {
          slug
          title
        }
      }
    }
  }
`;

Фрагменты упомянуты в документах Гэтсби здесь .

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