Может ли gatsby stati c запрашивать с помощью фильтра? - PullRequest
1 голос
/ 14 июля 2020

Может ли статистика c запрашивать с использованием фильтра?

я использую strapi в качестве моего сервера конфигурации

Я буду собирать данные конфигурации во время сборки

И у меня есть компонент, который должен запрашивать данные конфигурации по пользовательским данным (например, группа пользователей)

, однако кажется, что gatsby не позволяет мне передавать какие-либо переменные в запрос или даже жестко закодировать запрос с параметром

например,

graphql`
query MyQuery {
allStrapiAvailableLanguageByMarkets(filter: {country: {code: {eq: "CA"}}}) {
nodes {
country {
code
}
languages {
code
name
}
}
}
}`

1 Ответ

1 голос
/ 14 июля 2020

StaticQuery имеет собственные ограничения (поэтому они называются stati c), и они не допускают никаких параметров c Dynami. Как видно из Документация Gatsby :

Чем StaticQuery отличается от запроса страницы

StaticQuery может делать большинство вещей, которые может выполнять запрос страницы , включая фрагменты. Основные отличия:

  • запросы страниц могут принимать переменные (через pageContext), но могут быть добавлены только в компоненты страницы.
  • StaticQuery не принимает переменные (отсюда и название «статический ”), Но может использоваться в любом компоненте, включая страницы.
  • StaticQuery не работает с необработанными вызовами React.createElement; пожалуйста, используйте JSX, например

Конечно, вы можете фильтровать, используя жестко запрограммированное значение, это фактически единственное доступное решение, так как вы не можете фильтровать, используя динамическое c значение.

Проверьте свою localhost:8000/___graphql игровую площадку, чтобы узнать, работает ли ваш запрос (он должен). Обычно связанные значения в GraphQL должны быть отфильтрованы с использованием filter: { country__code: { eq:"CA" }}

В идеале ваш файл ловушки useStaticQuery должен выглядеть так:

import { graphql, useStaticQuery } from 'gatsby';

export const useYourItems = () => {
  const yourItems  = useStaticQuery(
    graphql`
        query MyQuery {
            allStrapiAvailableLanguageByMarkets(filter: {country: {code: {eq: "CA"}}}) {
                nodes {
                    country {
                        code
                    }
                    languages {
                        code
                        name
                    }
                }
            }
        }`,
  );

  return yourItems.allStrapiAvailableLanguageByMarkets;
};

Затем в другом компоненте:

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