Получить все изображения из определенного каталога через GraphQL и Gatsby JS

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

src/
   images/
     collection1/
     collection2/
     collection3/
     randomImage.jpg
     randomImage.svg
   components/
   pages/

В настоящее время у меня есть этот запрос:

export const pageQuery = graphql`
  query IndexQuery {
    site {
      siteMetadata {
        title
      }
    }
    heroFeaturedImage: imageSharp(id: { regex: "/war-room.jpg/" }) {
      sizes(maxWidth: 1250, quality: 90) {
        ...GatsbyImageSharpSizes
      }
    }
    allImageSharp {
      edges {
        node {
          ... on ImageSharp {
            sizes(maxWidth: 1250, quality: 90) {
              src
              srcSet
              originalName
            }
          }
        }
      }
    }
  }
`;

Вот мой gatsby-config.js:

module.exports = {
  siteMetadata: {
    title: 'Get all images in directory test',
  },
  plugins: [
    'gatsby-plugin-react-helmet',
    'gatsby-plugin-styled-components',
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        path: `${__dirname}/src/pages`,
        name: 'pages',
      },
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        path: `${__dirname}/src/images`,
        name: 'images',
      },
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `collection1`,
        path: `${__dirname}/src/images/collection1`,
      },
    },
    {
      resolve: `gatsby-plugin-google-fonts`,
      options: {
        fonts: [`Roboto\:300,400,500,600`, `Montserrat\:300,400,600,800`],
      },
    },
  ],
};

Проблема в том, что возвращает ВСЕ изображения в проекте без отличного способа организации конкретных изображений, которые я хочу.

Получить все изображения из определенного каталога через GraphQL и Gatsby JS

Итак, как я могу получить все изображения только из определенного каталога (например, collection1)?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
2 988
1

Ответы 1

Пара вещей бросается мне в глаза, хотя я не уверен, решает ли это проблему:

1) Как ни странно, в gatsby-config.js вы дважды вызываете gatsby-source-filesystem, что составляет один и тот же набор изображений. Я думаю, вы могли бы потерять этот вызов на collection1, это, насколько я понимаю, избыточно.

2) Запрос allImageSharp выглядит так, как должен, возвращая все. Вы пробовали такой запрос:

export const pageQuery = graphql`
  query IndexQuery {
    site {
      siteMetadata {
        title
      }
    }
    collectionOneImages: imageSharp(id: { regex: "^/collection1/?(?:[^/]+/?)*$" }) {
      sizes(maxWidth: 1250, quality: 90) {
        ...GatsbyImageSharpSizes
      }
    }
    collectionTwoImages: imageSharp(id: { regex: "^/collection2/?(?:[^/]+/?)*$" }) {
      sizes(maxWidth: 1250, quality: 90) {
        ...GatsbyImageSharpSizes
      }
    }
    collectionThreeImages: imageSharp(id: { regex: "^/collection3/?(?:[^/]+/?)*$" }) {
      sizes(maxWidth: 1250, quality: 90) {
        ...GatsbyImageSharpSizes
      }
    }
  }
`;

Я не лучший специалист с регулярными выражениями, но эти запросы к регулярным выражениям, по сути, означают: «дайте мне любой файл после коллекции #».

Спасибо за ответ @staypuftman. Я обновил запрос, но он возвращает только одно изображение вместо 3 или 4 изображений, которые находятся в папке.

jkjmr6 07.05.2018 22:29

@ jkjmr6 - Я отредактировал регулярное выражение, чтобы найти больше файлов, попробуйте. Я думаю, вам просто нужно немного подправить регулярные выражения, и все почти готово.

serraosays 08.05.2018 15:49

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