Требовать в reactjs бросает не может найти модуль

Изменить: Noob помогает здесь.

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

React получает массив объектов из экспресса. прокрутите, получите ссылку на изображение каждого объекта и добавьте ее в источник.

Это исходный код

  {this.state.currentTemplates.map((items, pos) => {
            return (
              <div className={`template `}>
                <img src={require(`${items.link}1.jpg`)} />
                <p>{items.name}</p>
                <div className="buy">buy</div>
              </div>

если такое изображение существует, require найдет его, и оно будет работать.

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

 <div className={`template `}>
//sending url to another function. Also I can put the function outside of class and just call without 'this' and it does not make any difference.

                <img src={this.checkUrl(`${items.link}1.jpg`)} />
                <p>{items.name}</p>
                <div className="buy">buy</div>

Ex:

 checkUrl(url) {
       console.log(url); // receive right url '../products/templates/a.jpg'
       try {  
 // try will require the right url but module cannot found it and it goes to catch. Now I can also put it in a variable var a= require(url) and it does not make a difference

          require(url);
console.log("it works "); // it never gets to here.
          return url; // this may not work once returned but it does not get to here.
      }catch(e) {
//react jump to catch with "cannot find module '../products/templates/a.jpg'"
         console.log(e);
       }
}

Я получил ошибку: требуется не может найти модуль '../products/templates/1.jpg'

интересная вещь. Если я добавлю папку продукта в папку компонента с файлом templates.jsx. оно работает.

Также это не синтаксическая ошибка, возможно, я сделал опечатку, воспроизводя проблему здесь.

Резюме: если я вызову require(url) прямо из src jsx, он найдет изображение.

Если я передам URL-адрес другой функции, чтобы попытаться поймать. Консоль регистрирует правильный URL-адрес, но требует, чтобы бросок не смог найти модуль.

это ограничение реакции? есть ли обходной путь? Я приближаюсь к этому тебе неправильно?


person JaP    schedule 31.08.2019    source источник
comment
попробуйте без запроса, почему используйте требование, это должно работать без требования этой формы ‹img src={${items.link}1.jpg`)} /›   -  person Mohammed_Alreai    schedule 31.08.2019
comment
Я попробовал это, и вот что я получил. Изображение просто не отображается, но при проверке я вижу правильный URL. «‹img src=../products/moveItFitness/1.jpg›», но на вкладке «Сеть». 1.jpg имеет это сообщение об ошибке. Невозможно ПОЛУЧИТЬ /products/moveItFitness/1.jpg . Я думаю, мне придется поместить изображение в ту же папку. Вернуться назад на 2 шага не представляется возможным.   -  person JaP    schedule 31.08.2019


Ответы (2)


Вы подходите к этому неправильно, ваши изображения ДОЛЖНЫ обслуживаться, не требуя их в качестве модуля. Он должен быть включен в ваши статические ресурсы или внешний URL-адрес, обслуживаемый на другом сервере. Это общая схема, не усложняйте.

Если у вас есть общая папка, просто поместите ее туда, как в

public/images/image1.jpeg

Затем в вашем коде вы можете получить к нему доступ:

<img src="/images/image1.jpeg" />

При условии, что вы обслуживаете активы.

Надеюсь это поможет!

person Jojo Tutor    schedule 31.08.2019
comment
Это интересно. Вы знаете, что я изначально написал это так (исходя из html, css, чистого фона js.), но это не работает. Картинка просто не загружается. После исследования я обнаружил, что для реакции либо требуется изображение, либо я должен его импортировать. Поскольку информация о ссылках поступает из базы данных, я не мог жестко кодировать, она должна была быть динамической. Но я попробую еще раз, на всякий случай, если я был пьян. Внешний URL-адрес работает именно так. Протестировал это - person JaP; 31.08.2019
comment
Если да, то просто поместите ссылку прямо в src=link-здесь. Это не обязательно. элемент ‹img› просто загружает изображение, получая его по URL-адресу. См., например, если у вас есть 1000 изображений, то они должны быть в вашей папке, потому что вам нужно, чтобы они использовались? Ответ - нет! Вот почему вам не нужно изображение, только ссылка. Вы понимаете, что я имею в виду? - person Jojo Tutor; 31.08.2019
comment
ладно спускайся бро. Я попробую и дам вам кредит, если это сработает. Спасибо за быстрый ответ. Просто чтобы быть уверенным, вы имеете в виду, что src={items.url} будет работать нормально. - person JaP; 31.08.2019
comment
хорошо, это не решило это так, как я хотел, но это работает, и это единственный способ. Файлы ДОЛЖНЫ находиться в общей папке. Он не может находиться за пределами общей папки, иначе он не будет работать, куда я хотел добавить файлы своих продуктов для управления. - person JaP; 04.09.2019

сначала проверьте, где находится папка, чтобы проверить, является ли путь, который обеспечивает истину или нет, используется этот <img src={${items.link}1.jpg} /> без повторного запроса, если изображение является внешним изображением, найденным в Интернете, будет нет проблем, но если это внутреннее хранилище, проверьте правильный путь

person Mohammed_Alreai    schedule 31.08.2019
comment
Я попробовал это, и вот что я получил. Изображение просто не отображается, но при проверке я вижу правильный URL. «‹img src=../products/moveItFitness/1.jpg›», но на вкладке «Сеть». 1.jpg имеет это сообщение об ошибке. Невозможно ПОЛУЧИТЬ /products/moveItFitness/1.jpg . Я думаю, мне придется поместить изображение в ту же папку. Вернуться назад на 2 шага не представляется возможным. - person JaP; 31.08.2019