Можно ли смешать два запроса GraphQL в один запрос?

Я использую Gatsby в качестве внешнего интерфейса для внутреннего интерфейса WordPress. Я успешно получил пункты меню, но теперь мне нужно связать их со страницами, которые я создал. Я добавил ссылки меню в свой Gatsbyconfig.js, но понятия не имею, как я могу сопоставить их с элементами меню одновременно с самим меню. В итоге они противоречат друг другу. Возможно ли это сделать? Я совсем новичок в graphQL. Никогда не трогал его до этого проекта. Ниже приведен запрос GraphQl

{
   allWpMenuItem(filter: {menu: {node: {name: {eq: "Navigation Menu"}}}}) {
      edges {
        node {
          label
        }
      }
    }
    site {
      siteMetadata {
        title
        menuLinks {
          name
          link
        }
      }
    }
}

Метка содержит имя для каждого меню, а ссылка содержит ссылку на страницы, которые я создал. Я пытаюсь исправить это в этом фрагменте кода

<div>
        {props.allWpMenuItem.edges.map(edge =>( 
            <a href = "#" key = {edge.node.label}>
                {edge.node.label}
            </a>
          
        ))}
      </div>

Я пытаюсь запросить ссылки меню, чтобы изменить тег привязки на элемент ссылки, а затем указать его на ссылку меню.

🤔 А знаете ли вы, что...
JavaScript - это скриптовый язык программирования, разработанный Netscape Communications Corporation.


1
174
1

Ответ:

Решено

Короткий ответ: вы не можете, изначально каждый запрос является отдельной сущностью. Тем не менее, вы можете комбинировать запросы, используя createResolvers , для более подробной информации смотрите: https://github.com/gatsbyjs/gatsby/discussions/28275 (спасибо LekoArts за отзыв).

Однако у вас есть несколько способов обойти это ограничение. Учитывая, что каждый запрос преобразуется в отдельный объект JavaScript, вы всегда можете манипулировать ими, используя встроенную фильтрацию JavaScript или делая все, что вам нужно. Идея состоит в том, чтобы создать пустой объект и заполнить его ссылками и метками в одном цикле или с использованием двух разных, а затем в вашем компоненте выполнить итерацию по этому объекту вместо props, как вы делаете сейчас.

Я не могу создать минимальный пример, не зная внутренней структуры или не зная, что внутри menuLinks.name.

Кстати, если вы используете внутреннюю навигацию, я бы вряд ли предложил использовать компонент <Link>, среди прочего, использование @reach/router (расширенного от маршрутизатора React) будет отображать только необходимые части каждого компонента, создавая более плавную навигацию, чем используя собственный тег привязки, который обновит всю страницу.