Гэтсби: как вставить данные из фронтматтера (файла Mdx) в компонент

У меня есть серия файлов .mdx, содержащих одну и ту же информацию, но на разных сайтах (например, title = "aswan"; title = "rome" и т. Д.). Эти файлы находятся в папке «метаданные».

Мне нужно вставить информацию MDX в компонент (OurSites.js), который формирует домашнюю страницу сайта (index.js).

Это содержимое компонента OurSites.js:

Вот как выглядит компонент:

1 ответ

У вас есть два варианта:

В первом варианте ваши запросы должны идти на странице (отсюда и название), и вам нужно детализировать реквизиты, содержащие ваши данные, до каждого желаемого компонента. Поскольку у вас уже есть набор запросов, вам просто нужно:

      import * as React from "react";
import Layout from "../components/Layout";
import Slider from "../components/Slider";
import About from "../components/Home/About";
import Methods from "../components/Home/Methods";
import OurSites from "../components/Home/OurSites";
import { graphql } from "gatsby";

// markup
const IndexPage = ({ data }) => {
 console.log("your props.data is inside data: " data); 
 return (
    <Layout>
      <Slider />
      <About />
      <Methods />
      <OurSites sites={data.allMdx.nodes}/>
    </Layout>
  );
};

export const query = graphql`
  {
    allMdx(limit: 8, sort: { fields: frontmatter___title, order: ASC }) {
      nodes {
        id
        frontmatter {
          title
          status
          typology
          image {
            childImageSharp {
              gatsbyImageData
            }
          }
        }
        excerpt
      }
    }
  }
`;

export default IndexPage;

Ваши запрошенные данные (через GraphQL) находятся внутри props.data (деструктурировано как data). Вы можете просмотреть информацию о сайте, data.allMdx.nodes(который представляет собой массив). Итак, в вашем компоненте вам нужно только получить props ( props.sites) и прокрутите их, чтобы динамически отображать ваши данные.

С useStaticQuery подход точно такой же, но данные можно хранить где-нибудь еще (в настраиваемом хуке или во внутреннем OurSites составная часть).

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