React.js上のimgの正しいパス


135

反応プロジェクトの画像に問題があります。確かに、私はいつもsrc属性への相対パスはファイルアーキテクチャ上に構築されていると思っていました

ここに私のファイルアーキテクチャ:

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

ただし、パスがURLに基​​づいて構築されていることに気付きました。私のコンポーネントの1つ(たとえば、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

この問題を解決するにはどうすればよいですか?react-routerで処理されるどのような形式のルートでも、すべての画像を同じパスで表示できることを望んでいます。


1
画像を直接指すだけです
。../

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./details2つを混同するかもしれない他の人に対してなど)。
user1322092 2016

1
私にとってもうまくいきません。私はeslint reactjsと一緒cordovaに使用しES5ています
Jimit Patel

これとclaireablaniのソリューションはどちらも機能しますが、create-react-appのドキュメントで推奨されているのはclaireablaniのソリューションです。彼らは公共の場でのリソースを置く上で多くの利点をリストfacebook.github.io/create-react-app/docs/...
Athir Nuaimi

@ user1322092は正しいです。それはだ覚えていません。すべてのルートともので私のために働いた。/images/popcorn.png./images/popcorn.png
Nuhman

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ファイルで参照される動的画像はどうですか?
2017年

2
@zok変数をJSONファイルからエクスポートし、コンポーネントにインポートすると思います。その後、通常どおりに参照できます。たとえば、const my_src = variable_hereをエクスポートし、my_fileから{my_src}をインポートし、src = {my_src}をインポートします。
claireablani 2017年

1
import './styles/style.less'; **import logo from './styles/images/deadline.png';**画像が存在し、パスが正しいにもかかわらず、2行目のモジュールが見つからないというエラーが発生します。
Hitendra 2017年

このメソッドは、コアWebpack作成者のメソッドの1つを確認したい場合にも、survive.jsによって確認されます。また、babel-plugin-transform-react-jsx-img-importを使用して、画像を参照するたびに画像をインポートする必要があることを回避できるとも述べています。
Andre

2
ない、これは、それが唯一の画像の問題を解決しますが、パスの問題を解決していません。..ディマGershman」答えは、実際には任意のファイルIMGまたは他のパスのためのソリューションを反応させるのである
サミ

130

create-react-appを使用してプロジェクトを作成した場合、パブリックフォルダーにアクセスできます。したがってimage、パブリックフォルダー内にフォルダーを追加する必要があります。

public / images /

<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
これは実際にはファイルのすべてのタイプのパスに対するreactjsソリューションであるため、正解としてマークする必要があります
Sami

これが正解だと思う理由がわかりません。私はこの答えを試しましたが、クレアブラニの答えとクレアの答えはうまくいきましたが、うまくいきませんでした。この回答は、画像がパブリックフォルダにある場合にのみ機能します。画像をパブリックフォルダーに入れますか?@Sami
マデラス

はい@Maderasの最初の事柄は、この答えが受け入れられたものと同じである=>単に{}とベースURLを削除するだけですsrc = '/ relative path of image'またはsrc = 'absolute path of image'これだけではありません答えは、あらゆる画像の可変パスに対応することです
Sami

これまでのところ、私にとっては魅力のように機能します。他には何もしませんでした!そして、私はほとんどすべてを試しました。ありがとう!
マリアキャンベル

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" />

    どちらの方法も機能しますが、ビルド時にクリーンな方法と画像がwebpackによって処理されるため、最初の方法をお勧めします。


2
これは私を助けました:)
ラファエル

これは機能しません。「/ images / pitbull
Jeremy Rea

あなたは答えで言及されたものを試しましたか?これも動作するはずです。
Mustkeem K

26

私の場合、次のコードも機能します。

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

1
それでうまくいきました。これは、パブリックフォルダーに画像を保存したくない場合に機能します
Mr_LinDowsMac

13

古い回答の一部は機能しませんが、他の回答は優れていますが、要約するとテーマを説明しません。

画像が「公開」ディレクトリにある場合

例: \public\charts\a.png

HTML:

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

JavaScriptの場合:

新しいimgに動的にイメージを作成します。

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

IDが「img1」の既存のimgに画像を動的に設定します。

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

画像が「src」ディレクトリにある場合:

例: \src\logo.svg

JavaScriptの場合:

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

jsxの場合:

<img src={logo} /> 


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.