Подтвердить что ты не робот

Правильный путь для img на React.js

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

Вот моя файловая архитектура:

components
    file1.jsx
    file2.jsx
    file3.jsx
container
img
js 
... 

Однако я понял, что путь построен на URL. В одном из моих компонентов (например, в file1.jsx) у меня есть это:

localhost/details/2
<img src="../img/myImage.png" /> -> works

localhost/details/2/id
<img src="../img/myImage.png" /> -> doesn't work, images are not displayed

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

4b9b3361

Ответ 1

Вы используете относительный URL-адрес, который относится к текущему URL-адресу, а не к файловой системе. Вы можете решить эту проблему, используя абсолютные URL

<img src ="http://localhost:3000/details/img/myImage.png" />

Но это не очень удобно при развертывании на www.my-domain.bike или на любом другом сайте. Лучше было бы использовать URL-адрес относительно корневого каталога сайта

<img src="/details/img/myImage.png" />

Ответ 2

Не пытайтесь ответить на вопрос - просто заметьте, что в приложении create-response-app относительные пути для изображений не работают. Вместо этого вы можете импортировать изображение.

import logo from './logo.png' // relative path to image 

class Nav extends Component { 
    render() { 
        return ( 
            <img src={logo} alt={"logo"}/> 
        )  
    }
}

Ответ 3

Если вы использовали create-реагировать на приложение, чтобы создать свой проект, то ваша общая папка доступна. Так что вам нужно добавить папку с image в общую папку.

общественности/изображения/

<img src="/images/logo.png"/>

Ответ 4

С create-react-app есть общая папка (с index.html...). Если вы разместите свой "myImage.png" там, скажем, в подпапке img, то вы можете получить к ним доступ через:

<img src={window.location.origin + '/img/myImage.png'} />

Ответ 5

в моем случае следующий код тоже работает.

<img src={require('../logo.png')} alt="logo" className="brand-logo"/>

Ответ 6

Я бы порекомендовал использовать традиционный относительный путь. Вы можете использовать как это ниже в изображении. Мы можем поместить что-нибудь в эту public папку и настроить таргетинг на эту папку для доступа к images, videos и т.д. Эта настройка выполняется самой реакцией. Для этого храните ваши изображения в общей папке. Вот так...

enter image description here

И чем в вашем jsx.

<img src="images/pitbull-mark.png" />

Ответ 7

Некоторые старые ответы не работают, другие хороши, но не будут объяснять тему вкратце:

Если изображение находится в публичном каталоге

Пример: \public\charts\a.png

В JavaScript:

Создать изображение для нового img, динамически:

var img1 = document.createElement("img");  
img1.src = 'charts/a.png';  

Установить изображение для существующего img с идентификатором как "img1", динамически:

document.getElementById('img1').src = 'charts/a.png';

Если изображение находится в каталоге 'src':

Пример: \src\logo.svg

В JavaScript:

import logo from './logo.svg';  
img1.src = logo;  

В jsx:

<img src={logo} /> 

Ответ 8

Добавление файла-загрузчика npm в webpack.config.js согласно его официальной инструкции по использованию, например, так:

config.module.rules.push(
    {
        test: /\.(png|jpg|gif)$/,
        use: [
            {
                loader: 'file-loader',
                options: {}
            }
        ]
    }
);

работал на меня.

Ответ 9

Друг показал мне, как сделать это следующим образом:

"./" работает, когда файл, запрашивающий изображение (например, "example.js"), находится на том же уровне в структуре дерева папок, что и папка "images".

Ответ 10

Поместите логотип в общую папку, например, в public/img/logo.png, а затем укажите общую папку как% PUBLIC_URL%:

<img src="%PUBLIC_URL%/img/logo.png"/>

Использование% PUBLIC_URL% в выше, будет заменено на URL в public папке во время сборки. Только файлы в public папке могут быть ссылки из HTML.

В отличие от "/img/logo.png" или "logo.png", "% PUBLIC_URL%/img/logo.png" будет корректно работать как с маршрутизацией на стороне клиента, так и с общедоступным URL без полномочий root. Узнайте, как настроить общедоступный URL без npm run build root, запустив npm run build.