React.js의 img에 대한 올바른 경로


135

반응 프로젝트의 이미지에 문제가 있습니다. 실제로 나는 항상 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

이 문제를 어떻게 해결할 수 있습니까? 반응 라우터가 처리하는 모든 형태의 경로에서 모든 이미지를 동일한 경로로 표시 할 수 있기를 바랍니다.


1
그냥 이미지를 직접 가리키고 ../ 무엇이든 사용하지 마십시오
omarjmh

4
를 사용해야 require합니다. 자세한 내용은 SO 에서이 답변 을 읽으십시오 .
오늘

이 답변이 도움이
되었기를 바랍니다.

답변:


73

파일 시스템이 아닌 현재 URL과 관련된 상대 URL을 사용하고 있습니다. 절대 URL을 사용하여이 문제를 해결할 수 있습니다.

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

그러나 www.my-domain.bike 또는 다른 사이트에 배포 할 때는 좋지 않습니다. 사이트의 루트 디렉토리에 상대적인 URL을 사용하는 것이 좋습니다

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


1
고마워, 나는 /그 앞에 details(vs ./details등을 혼동 할 수있는 다른 사람들을 위해) 강조합니다 .
user1322092

1
나에게도 작동하지 않습니다. 나는 eslint reactjs와 함께 cordova사용 ES5하고 있습니다
Jimit Patel

이것과 claireablani의 솔루션이 모두 작동하지만 claireablani 's는 create-react-app 문서에서 권장하는 것입니다. 그들은 공개 facebook.github.io/create-react-app/docs/에
Athir Nuaimi

@ user1322092가 맞습니다. 이 /images/popcorn.png아니라는 것을 기억하십시오 ./images/popcorn.png. 모든 경로와 물건으로 나를 위해 일했습니다.
Nuhman 2016 년

335

create-react-app이미지의 상대 경로 에서는 작동하지 않는 것 같습니다. 대신 이미지를 가져올 수 있습니다.

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

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

15
예를 들어 create-react-app의 json 파일에서 참조되는 동적 이미지는 어떻습니까?
zok

2
@zok JSON 파일에서 변수를 내보내고 변수를 구성 요소로 가져 오는 것으로 생각합니다. 그런 다음 평소처럼 참조 할 수 있습니다. 예를 들어, const const my_src = variable_here를 내보내고 my_file에서 {my_src}를 가져오고 src = {my_src}를 가져 오십시오.
claireablani

1
import './styles/style.less'; **import logo from './styles/images/deadline.png';**이미지가 존재하고 경로가 올바른 동안 두 번째 라인 모듈에서 오류가 발생했습니다.
Hitendra

이 방법은 또한에 의해에 의해 확인 survive.js 당신은 핵심 웹팩 저자의 방법 중 하나를 살펴하려는 경우. 또한 babel-plugin-transform-react-jsx-img-import 를 사용하여 이미지를 참조 할 때마다 이미지를 가져와야 할 수도 있다고 언급했습니다.
Andre

2
이것 만이 아니라 이미지 문제 만 해결하지만 경로 문제는 해결하지 못합니다. Dima Gershman의 답변은 파일 img 등의 경로에 대한 실제 반응 솔루션입니다
Sami

130

create-react-app를 사용하여 프로젝트를 만든 경우 공용 폴더에 액세스 할 수 있습니다. 따라서 image공용 폴더 안에 폴더 를 추가해야 합니다.

공개 / 이미지 /

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


질문을하려고했지만이 답변으로 문제가 해결되었습니다 !!! 답변으로 표시해야합니다. 감사!!! +1
Si8

그것은 나를 위해 일했다. 공용 이미지에 새 이미지를 추가 한 경우 앱을 다시 시작해야합니다.
awasik

실제로 상황을 처리하는 빠른 방법이지만 상대 URL이 필요하지 않은 경우에만 작동합니다. 예를 들어에서 앱을 제공하는 경우 www.example.com/react-app공용 폴더는 www.example.com에 (없이) 노출됩니다 react-app. 문제가 될 수 있으므로 허용되는 답변이 정답입니다. 출처 : 자산 추가공용 폴더 사용
Alexandru Pirvu

44

create-react-app공공 폴더 (와 index.html을가 ...). "myImage.png"를 img 하위 폴더 아래에 배치하면 다음을 통해 액세스 할 수 있습니다.

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

4
파일의 모든 유형의 경로에 실제로 반응하는 솔루션이기 때문에 정답으로 표시해야합니다.
Sami

왜 이것이 정답이라고 생각하는지 모르겠습니다. 방금이 답변을 시도했지만 Claireblani의 답변과 claire의 답변은 효과가 없었지만 작동했습니다. 이 답변은 이미지가 공용 폴더에있는 경우에만 작동합니다. 이미지가 공용 폴더로 이동해야합니까? @Sami
Maderas

네 @Maderas의 첫 번째는이 답변이 허용 된 것과 동일하다는 것입니다. =} {}를 제거하고 기본 URL을 간단하게 사용할 수 있습니다. 대답은 모든 이미지에 대한 가변 경로를 수용한다는 것입니다
Sami

지금까지는 매력처럼 작동합니다. 다른 일은 없었습니다! 그리고 나는 거의 모든 것을 시도했습니다. 감사!
Maria Campbell

32
  1. src (/ src / images) 안에 이미지 폴더를 만들고 이미지를 보관하십시오. 그런 다음 컴포넌트에서이 이미지를 가져 오십시오 (상대 경로 사용). 아래처럼

    import imageSrc from './images/image-name.jpg';

    그런 다음 구성 요소에서.

    <img title="my-img" src={imageSrc} alt="my-img" />

  2. 다른 방법은 이미지를 공용 폴더에 유지하고 상대 경로를 사용하여 이미지를 가져 오는 것입니다. 이를 위해 공용 폴더에 이미지 폴더를 만들고 이미지를 보관하십시오. 그런 다음 구성 요소에서 아래와 같이 사용하십시오.

    <img title="my-img" src='/images/my-image.jpg' alt="my-img" />

    두 가지 방법 모두 작동하지만 첫 번째 방법은 빌드하는 동안 웹 팩으로 더 깔끔한 방식과 이미지를 처리하기 때문에 권장됩니다.


2
이것은 나를 도와 주었다 :)
Raphael

이하지 않습니다 일, 슬래시를 (/)과 같이 상대 경로를 표시하기 위해 시작해야합니다 : "/images/pitbull-mark.png"
제레미 정말이에요

답변에 언급 된 것을 시도 했습니까? 이것도 효과가 있습니다.
Mustkeem K

26

내 경우에는 다음 코드도 작동합니다.

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

1
그것은 나를 위해 일했다. 이것은 공용 폴더에 이미지를 저장하고 싶지 않은 경우에 작동합니다
Mr_LinDowsMac

13

일부 오래된 답변은 효과가 없으며 다른 답변은 훌륭하지만 주제를 설명하지는 않습니다.

이미지가 'public'디렉토리에있는 경우

예: \public\charts\a.png

html로 :

<img id="imglogo" src="/charts/logo.svg" />

자바 스크립트에서 :

동적으로 새 이미지로 이미지를 만듭니다.

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

id를 'img1'로 기존 img로 이미지를 동적으로 설정하십시오.

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

이미지가 'src'디렉토리에있는 경우 :

예: \src\logo.svg

자바 스크립트에서 :

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

jsx에서 :

<img src={logo} /> 

3

공식 사용 지침에 따라 webload.config.js에 파일 로더 npm 을 다음과 같이 추가 하십시오 .

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

나를 위해 일했다.


3

컴포넌트에서 이미지 가져 오기

import RecentProjectImage_3 from '../../asset/image/recent-projects/latest_news_3.jpg'

그리고 이미지 src = {RecentProjectImage_3} 의 이미지 이름을 객체로 호출하십시오.

 <Img src={RecentProjectImage_3} alt="" />

2

친구가 다음과 같이이 작업을 수행하는 방법을 보여주었습니다.

"./"는 이미지를 요청하는 파일 (예 : "example.js")이 "images"폴더와 폴더 트리 구조 내에서 동일한 수준에있을 때 작동합니다.


1

공용 폴더에 로고를 예를 들어 public / img / logo.png 아래에 둔 다음 공용 폴더를 % PUBLIC_URL %이라고합니다.

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

위의 % PUBLIC_URL % 사용은 public빌드 중에 폴더 의 URL로 대체됩니다 . public폴더 내 파일 만 HTML에서 참조 할 수 있습니다.

"/img/logo.png"또는 "logo.png"와 달리 "% PUBLIC_URL % / img / logo.png"는 클라이언트 측 라우팅 및 루트가 아닌 공개 URL 모두에서 올바르게 작동합니다. 를 실행하여 루트가 아닌 공개 URL을 구성하는 방법에 대해 알아보십시오 npm run build.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.