ReactJSとパブリックフォルダー内の画像


102

ReactJSの新機能で、コンポーネントに画像をインポートしたいと思います。これらの画像はパブリックフォルダー内にあり、reactコンポーネントからフォルダーにアクセスする方法がわかりません。

何か案は ?

編集

Bottom.jsまたはHeader.js内に画像をインポートしたい

構造フォルダーは次のとおりです。

ここに画像の説明を入力してください

私はwebpackを使用していません。したほうがいい ?

編集2

画像やその他のアセットの読み込みにwebpackを使用したいと思います。したがって、configフォルダーには次のファイルがあります。

ここに画像の説明を入力してください

画像のパスを追加する必要がある場所と方法は?

ありがとう


1
このフォルダは何に公開されていますか?あなたのプロジェクト構造は何ですか?画像もwebpackにバンドルしていますか、それとも除外されていますか?etc etc etcコンテキストコンテキスト
Joel Harkes 2017年

@JoelHarkesが編集しました。
Aceconhielo 2017年

梱包されていないようです。試しましたsrc="/images/logofooter.png"か:?
Joel Harkes 2017年

申し訳ありませんが、これは質問とは関係ありませんが、どのアイコンテーマを使用していますか?
Nermin

src内にフォルダーを作成し、その中にアセットを保存して、相対パスを使用してインポートしてみてください。これは、いくつかの理由で優れています。ただの提案です!
AdityaPatnaik20年

回答:


86

公共の場で画像を参照するには、2つの方法があります。1つはHomamBahraniの上記のようなものです。

を使用して

    <img src={process.env.PUBLIC_URL + '/yourPathHere.jpg'} /> 

そして、これは機能するので、他に何も必要ありませんが、これも機能します...

    <img src={window.location.origin + '/yourPathHere.jpg'} />

1
コンソールにエラーは表示されませんが、画像はインポートしたものではなく、デフォルトの画像アイコンとして表示されます。私はあなたが言及した両方のケースを試しました。私を助けてください。ありがとう!
PrakharMittal19年

160

このためにwebpack構成は必要ありません。

コンポーネントで、画像パスを指定するだけです。デフォルトでは、reactはパブリックディレクトリにあることを認識します。

<img src="/image.jpg" alt="image" />

2
これは私のために働いた。画像をパブリックディレクトリにコピーしただけです。Reactは自動的にパスを解決しました。
VineethBhaskaran19年

2
また、画像がパブリックフォルダ内のフォルダにある場合、反応してそれを見つけることができますか?
YuvalLevy20年

2
はい@YuvalLevy。
OliverVoutat20年

process.env.PUBLIC_URLは相対ルートであり、ネストされたルートでは正しく機能しないため、これが最適な方法です。回答で指定されているように、スラッシュで始まる絶対ルートを使用するのが最善です...
BarajaSwargiary20年

12

反応ドキュメントはこれをドキュメントでうまく説明していprocess.env.PUBLIC_URLます。パブリックフォルダに配置された画像で使用する必要があります。詳細については、こちらをご覧ください

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />;

はい、srcdir階層外の動的イメージの場合。ロゴや背景などの静的なものには、インポート方法でアクセスできます。
JuanLanus19年

1
で構築されたアプリがアプリの反応を作成するためにも、これがある
eballeste

1
コンソールにエラーは表示されませんが、画像はインポートしたものではなく、デフォルトの画像アイコンとして表示されます。私を助けてください。
PrakharMittal19年

3

1-構成にwebpackを使用するのは良いことですが、イメージパスを使用するだけで、reactはそれがパブリックディレクトリにあることを検出します。

<img src="/image.jpg">

2-Reactの標準的な方法であるwebpackを使用したい場合。これらのルールは、webpack.config.dev.jsファイルで使用できます。

module: {
  rules: [
    {
      test: /\.(jpe?g|gif|png|svg)$/i,
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 10000
          }
        }
      ]
    }
  ],
},

次に、reactコンポーネントに画像ファイルをインポートして使用できます。

import image from '../../public/images/logofooter.png'

<img src={image}/>

2

あなたはあなたの人生を楽にするためにここでwebpackを使うべきです。設定に以下のルールを追加します。

const srcPath = path.join(__dirname, '..', 'publicfolder')

const rules = []

const includePaths = [
  srcPath
]
    // handle images
    rules.push({
      test: /\.(png|gif|jpe?g|svg|ico)$/,
      include: includePaths,
      use: [{
        loader: 'file-loader',
        options: {
          name: 'images/[name]-[hash].[ext]'
        }
      }

この後、画像をreactコンポーネントにインポートするだけです。

import myImage from 'publicfolder/images/Image1.png'

以下のようにmyImageを使用します。

<div><img src={myImage}/></div>

または、画像がコンポーネントのローカル状態にインポートされた場合

<div><img src={this.state.myImage}/></div> 

リソースのインポートを実行できるようにするためにwebpackが必要かどうかは疑問です。
Siya 2017年

@fshock、私はそれがタスクを達成するのをより簡単にするだろうと言いました。
Umesh 2017年

@UmeshWebpackでやりたいです。だからあなたは私が設定にルールを追加する必要があると言いましたが、どのファイルですか?path.js、polyfills.js、webpack.config.dev.js、webpack.config.prod.js、webpackDevServer.config.jsがあります。質問を編集して、すべての人が構造を確認できるようにします。ありがとう
Aceconhielo 2017年

@ Aceconhielo、webpack.config.dev.jsとwebpack.config.prod.jsに含める必要があります
Umesh

2

ReactはSPAです。JSXから適切なHTMLに展開することにより、すべてがルートコンポーネントからレンダリングされます。

したがって、画像をどこで使用するかは問題ではありません。ベストプラクティスは、絶対パスを使用することです(パブリックを参照)。相対パスについて心配する必要はありません。

あなたの場合、これはどこでも機能するはずです:

"./images/logofooter.png"


0

これを使用することもできます。「yourimage.jpg」がパブリックフォルダにあると想定して機能します。

<img src={'./yourimage.jpg'}/>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.