Reactでローカル画像を参照するにはどうすればよいですか?


166

ローカルディレクトリから画像を読み込んでreactjs img srcタグに含めるにはどうすればよいですか?

one.jpegコンポーネントと同じフォルダー内に呼び出される画像があり、両方<img src="one.jpeg" />と関数<img src={"one.jpeg"} />内で試しましたrenderが、画像が表示されません。また、webpack configプロジェクトは公式のcreate-react-appコマンドラインユーティリティで作成されているため、ファイルにアクセスできません。

更新:これは、で画像を最初にインポートしimport img from './one.jpeg'て内部img src={img}で使用する場合に機能しますが、インポートする画像ファイルが非常に多いため、の形式で使用しますimg src={'image_name.jpeg'}




私は実際に同様の問題を抱えています、私の画像はindex.jsxファイルにインポートされています、私はローダーをwebpackに持っています、実際に画像のコピーが私のサーバー/ public / jsに作成されているため、コンパイル面は正常に機能していますランダムな番号のフォルダー、およびその正しいパスはバンドラーにありますが、画像を視覚化できません。また、私がindex.jsに書いたように、server / public / jsではなくserver / public / jsで生成されたのも奇妙です
Carmine Tambascia

回答:


302

まず、srcをラップします {}

次に、Webpackを使用している場合。の代わりに: <img src={"./logo.jpeg"} />

requireを使用する必要があるかもしれません:

<img src={require('./logo.jpeg')} />


別のオプションは、最初に画像をそのようにインポートすることです:

import logo from './logo.jpeg'; // with import

または...

const logo = require('./logo.jpeg); // with require

それを差し込みます...

<img src={logo} />

特に画像ソースを再利用する場合は、このオプションをお勧めします。


13
.相対URLの先頭のを忘れないように注意してください。する必要があります<img src={require('./one.jpeg')} />
Nuhman 2018年

1
これらの方法のいずれかは、画像の読み込み時間などのパフォーマンスに影響しますか?もしそうなら、どちらがパフォーマンス的に優れていますか?
Inaam ur Rehman

1
@ انعامالرحمٰن-ここにいくつかのコメントstackoverflow.com/questions/31354559/…がありますが、TL; DRは違います。パフォーマンスの違いはありません。
Apswak

少なくともwebpack 4では、使用するローダーが以前のファイルではなくurl-loaderであるという事実が欠けています
Carmine Tambascia

64

最善の方法は、最初にイメージをインポートしてから使用することです。

import React, { Component } from 'react';
import logo from '../logo.svg';
export default class Header extends Component {
  render() {
    return (
      <div className="row">
        <div className="logo">
          <img src={logo} width="100" height="50" />
        </div>
      </div>
    );
  }
} 

1
なぜそれが最善の方法ですか?
Jason Leach

8
同じコンポーネントで再利用する必要がある場合は、パス参照なしで使用できます。それは良い習慣です@JasonLeach
Arslan shakoor 2018

ジェイソン・リーチはそれがよりクリーンな方法です
アルスラーン・シャクール

8

あなたはあなたの中にイメージソースパスをラップする必要があります {}

<img src={'path/to/one.jpeg'} />

使用する必要があります require場合は使用webpack

<img src={require('path/to/one.jpeg')} />

8

パブリックフォルダー内にアセットフォルダーを作成し、それに応じて画像パスを配置します。

<img className="img-fluid" 
     src={`${process.env.PUBLIC_URL}/assets/images/uc-white.png`} 
     alt="logo"/>

ありがとうございます。これは、画像が表示されているリソースに基づいて動的にインポートされるため、フォルダに画像が存在する場合と存在しない場合に役立ちます。
セバスチャンデヴァレンヌ

4

画像をインポートするための最良の方法は...

import React, { Component } from 'react';

// image import
import CartIcon from '../images/CartIcon.png';

 class App extends Component {
  render() {
    return (
     <div>
         //Call image in source like this
          <img src={CartIcon}/>
     </div>
    );
  }
}

1
src /以外の相対インポートはサポートされていません。これを行うには、画像をsrc /に保存する必要がありますが、これはお勧めしません
toing_toing

@toing_toing srcに画像を保存することをお勧めしませんか?:公式ドキュメントには、このような場合は例があるfacebook.github.io/create-react-app/docs/...
roob

webpackバンドルのサイズとコンパイル時間が増加し、アセットを変更するたびに再コンパイルする必要があり、ロード時間が増加します。私はむしろそれをパブリックフォルダに入れて、URLでリンクしたいと思います。
toing_toing

4
@toing_toing「どちらかと言えば...」と言いますが、その方法は言いません。
トーマスジェイラッシュ

1

私の答えは基本的にルブゼンのそれに非常に似ています。画像をオブジェクト値として使用しています。私には2つのバージョンが機能します。

{
"name": "Silver Card",
"logo": require('./golden-card.png'),

または

const goldenCard = require('./golden-card.png');
{ "name": "Silver Card",
"logo": goldenCard,

ラッパーなし-しかし、それもまた別のアプリケーションです。

私は「インポート」ソリューションもチェックしましたが、いくつかのケースでは機能します(驚くべきことではありませんが、ReactのパターンApp.jsに適用されています)が、上記のケースではそうではありません。


1

それには2つの方法があります。

最初

クラスの上に画像をインポートし、次の<img/>ように要素で参照します

import React, { Component } from 'react';
import myImg from '../path/myImg.svg';

export default class HelloImage extends Component {
  render() {
    return <img src={myImg} width="100" height="50" /> 
  }
} 

二番目

あなたは直接使用した画像のパスを指定することができますrequire('../pathToImh/img')<img/>、このような要素

import React, { Component } from 'react'; 

export default class HelloImage extends Component {
  render() {
    return <img src={require(../path/myImg.svg)} width="100" height="50" /> 
  }
}


0
import image from './img/one.jpg';

class Icons extends React.Component{
    render(){
      return(
        <img className='profile-image' alt='icon' src={image}/>
    );
    }
}
export default Icons;

0

私はこの方法を使用しましたが、それは機能します...お役に立てば幸いです。

const logofooter = require('../../project-files/images/logo.png');

 return(
 <div className="blockquote text-center">
            <img src={logofooter} width="100" height="80" />
 <div/>
);

0
import React from "react";   
import image from './img/one.jpg';

class Image extends React.Component{
  render(){
    return(
      <img className='profile-image' alt='icon' src={image}/>
   );
  }
}

デフォルトの画像をエクスポート



0

これを実装する別の方法を見つけました(これは機能コンポーネントです)。

const Image = ({icon}) => {
   const Img = require(`./path_to_your_file/${icon}.svg`).ReactComponent;
   return <Img />
}

それが役に立てば幸い!

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