Как мне сопоставить() все изображения в папке? | React.js и Vite

Мне нужно сопоставить все изображения в папке в общедоступном каталоге, и я следил за этим сообщением, чтобы попытаться это сделать, но получаю эту ошибку. Uncaught (in promise) ReferenceError: require is not defined at GalleryPage.jsx:8:16

Вот мой код

const images = require.context("/_fairImages", true);
const imageList = images.keys().map((image) => images(image));

function GalleryPage() { 
  return (
    <div className = "galleryPage_v2">
      <div className = "galleryWrapper">
        {imageList.map((image, index) => (
          <img src = {image.default} alt = "" className = "galleryImg" />
        ))}
      </div>
    </div>
  );
}


Вы не можете просмотреть содержимое каталога изнутри браузера.

gre_gor 02.07.2024 06:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

require.context должен интерпретироваться вашим сборщиком, а не средой выполнения.

Используете ли вы веб-пакет для объединения кода перед его запуском в браузере?

https://webpack.js.org/guides/dependent-management/#requirecontext

Ой, ок, я не знала этого про require.context. Нет, я не использую вебпак, на самом деле я использую Vite

Martin Arreola 02.07.2024 04:45
Ответ принят как подходящий

Поскольку вы используете Vite, вы можете попробовать import.meta.glob он похож на Webpack require.context

// Dynamically import all images in the _fairImages folder
const images = import.meta.glob('/public/_fairImages/*.{png,jpg,jpeg,svg}', { eager: true });

function GalleryPage() {
  const imageList = Object.values(images).map((image, index) => (
    <img key = {index} src = {image.default} alt = {`Image ${index + 1}`} className = "galleryImg" />
  ));

  return (
    <div className = "galleryPage_v2">
      <div className = "galleryWrapper">
        {imageList}
      </div>
    </div>
  );
}

Да, это сработало, большое спасибо!!

Martin Arreola 02.07.2024 16:21

Ну, однажды, когда мне нужно было сделать что-то подобное, я использовал следующий подход:
Я создал массив имен изображений из папки, в которой они находились. Вот как вы можете это сделать:

const importAll = (r) => {
    let images = {};
    r.keys().map((item, index) => { images[item.replace('./', '')] = r(item); });
    return images;
  };
  
  const images = importAll(require.context('./images', false, /\.(png|jpe?g|svg)$/))

Вот что я делаю:

  • require.context предоставляет все пути к файлам, соответствующие предоставленному шаблону (регулярному выражению)
  • false в функции importAll указывает, что погода включает подкаталоги или нет
  • Regex для проверки файлов с расширениями изображений

Теперь, когда у меня есть имена изображений, я могу просто перебирать:

<div className = "image-gallery">
        {Object.keys(images).map((imageName, index) => (
          <img key = {index} src = {images[imageName]} alt = {imageName} />
        ))}
</div>

Поскольку я использую Vite, я не могу использовать require.context, но я рад, что вы объяснили, что делают false и /\.(png|jpe?g|svg)$/, я этого не знал. Так что спасибо вам большое

Martin Arreola 02.07.2024 16:25

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