How do I reference a local image in React?

Reactjs

Reactjs Problem Overview


How can I load image from local directory and include it in reactjs img src tag?

I have an image called one.jpeg inside the same folder as my component and I tried both <img src="one.jpeg" /> and <img src={"one.jpeg"} /> inside my renderfunction but the image does not show up. Also, I do not have access to webpack config file since the project is created with the official create-react-app command line util.

Update: This works if I first import the image with import img from './one.jpeg' and use it inside img src={img}, but I have so many image files to import and therefore, I want to use them in the form, img src={'image_name.jpeg'}.

Reactjs Solutions


Solution 1 - Reactjs

First of all wrap the src in {}

Then if using Webpack; Instead of: <img src={"./logo.jpeg"} />

You may need to use require:

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


Another option would be to first import the image as such:

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

or ...

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

then plug it in...

<img src={logo} />

I'd recommend this option especially if you're reusing the image source.

Solution 2 - Reactjs

The best way is to import the image first and then use it.

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>
    );
  }
} 

Solution 3 - Reactjs

Inside public folder create an assets folder and place image path accordingly.

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

Solution 4 - Reactjs

you need to use require and . default

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

Solution 5 - Reactjs

You need to wrap you image source path within {}

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

You need to use require if using webpack

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

Solution 6 - Reactjs

the best way for import image is...

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>
    );
  }
}

Solution 7 - Reactjs

const photo = require(`../../uploads/images/${obj.photo}`).default;
...
<img src={photo} alt="user_photo" />

Solution 8 - Reactjs

put your images in the public folder or make a subfolder in your public folder and put your images there. for example:

  1. you put "completative-reptile.jpg" in the public folder, then you can access it as
src={'/completative-reptile.jpg'}
  1. you put completative-reptile.jpg at public/static/images, then you can access it as
src={'/static/images/completative-reptile.jpg'}

Solution 9 - Reactjs

I had the same problem and after research I managed to solve it by putting the JSON data in a constant in JS, with that I was able to import the image and only inform the import in the JSON object. Example:

import imageImport from './image.png';

export const example = [
  {
    "name": "example",
    "image": imageImport
  }
]

<Image source={example.image}/>

Solution 10 - Reactjs

You have two ways to do it.

First

Import the image on top of the class and then reference it in your <img/> element like this

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

Second

You can directly specify the image path using require('../pathToImh/img') in <img/> element like this

import React, { Component } from 'react'; 

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

Solution 11 - Reactjs

For people who want to use multiple images of course importing them one by one would be a problem. The solution is to move the images folder to the public folder. So if you had an image at public/images/logo.jpg, you could display that image this way:

function Header() {
  return (
    <div>
      <img src="images/logo.jpg" alt="logo"/>
    </div>
  );
}

Yes, no need to use /public/ in the source.

Read further: https://daveceddia.com/react-image-tag/.

Solution 12 - Reactjs

I found another way to implement this (this is a functional component):

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

Hope it helps!

Solution 13 - Reactjs

Step 1 : import MyIcon from './img/icon.png'

step 2 :

<img
    src={MyIcon}
    style={{width:'100%', height:'100%'}}
/>    

Solution 14 - Reactjs

First you have to import the image

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

then plug it in...

<img src={logo} />

That's it.

Solution 15 - Reactjs

For the require method to work, I had to add ".default", like this:

<img src={require('./path/to/image.svg').default} />

Solution 16 - Reactjs

My answer is basically very similar to that of Rubzen. I use the image as the object value, btw. Two versions work for me:

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

or

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

Without wrappers - but that is different application, too.

I have checked also "import" solution and in few cases it works (what is not surprising, that is applied in pattern App.js in React), but not in case as mine above.

Solution 17 - Reactjs

As some mentioned in the comments, you can put the images in the public folder. This is also explained in the docs of Create-React-App: https://create-react-app.dev/docs/using-the-public-folder/

Solution 18 - Reactjs

If you dont want to put your image inside public folder use below syntax

 src={require("../../assets/images/img_envelope.svg").default}

Solution 19 - Reactjs

I have used this way, and it works... I hope you useful.

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

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

Solution 20 - Reactjs

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}/>
   );
  }
}

export default Image

Solution 21 - Reactjs

You could create a file named for instance images.js and reference all your app resources there, later importing that component in all your other component where you would need to display images

Solution 22 - Reactjs

I wanted to import multiple images and pass them to different components. It turned out that I need to import multiple images only once and I can use them in any component by passing a prop.

import whiskey from './img/whiskey.jpg';
import hazel from './img/hazel.jpg';
import tubby from './img/tubby.jpg';

Let's make an object.

dog = [
   { name: "Whiskey", src: whiskey }, 
   // ...
]

And display the image

<img src={dog.src}></img>

Solution 23 - Reactjs

I actually just ran into this very same problem and if you move your image file from the ./public directory to the ./src directory you can import or require and either will render.

enter image description here

enter image description here

enter image description here

enter image description here

I have also tested both with the image as well as src attributes in the component and they both worked.

After I tried using the ../ to indicate the exact folder the jpg was located in I was given a usable error that allowed me to make the easy fix.

enter image description here

enter image description here the computer was kind enough to give me a usable error message.

Solution 24 - Reactjs

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

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

Solution 25 - Reactjs

Well, you all know the answer to the question asked by now, but I am posting this answer to the question which most of you might be wondering after reading other answers:

Question: How the hell am I suppose to import 50 or 100 files:)

Answer: I suggest you make an api (.json) file and in that put the links to all the images and call the api. That's by far the best way to import files in bulk very easily, although it will take some time and knowledge, which If you don't already know.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZipView Question on Stackoverflow
Solution 1 - ReactjsW12345View Answer on Stackoverflow
Solution 2 - ReactjsArslan shakoorView Answer on Stackoverflow
Solution 3 - ReactjsHarshvardhan Singh BaghelView Answer on Stackoverflow
Solution 4 - ReactjsYasiru PadmasiriView Answer on Stackoverflow
Solution 5 - ReactjsShubham KhatriView Answer on Stackoverflow
Solution 6 - ReactjsAbdul MoizView Answer on Stackoverflow
Solution 7 - Reactjsnatan natalinView Answer on Stackoverflow
Solution 8 - ReactjsAkshat gadhwalView Answer on Stackoverflow
Solution 9 - ReactjsLucas SouzaView Answer on Stackoverflow
Solution 10 - ReactjsHadi MirView Answer on Stackoverflow
Solution 11 - ReactjsJoan GavelánView Answer on Stackoverflow
Solution 12 - ReactjsKai Sheng TungView Answer on Stackoverflow
Solution 13 - ReactjsRahul SarmaView Answer on Stackoverflow
Solution 14 - ReactjsShahid Hussain AbbasiView Answer on Stackoverflow
Solution 15 - ReactjsShemView Answer on Stackoverflow
Solution 16 - ReactjsKiszuriwaliliboriView Answer on Stackoverflow
Solution 17 - ReactjsdyedwiperView Answer on Stackoverflow
Solution 18 - ReactjsDivyesh BhalaniView Answer on Stackoverflow
Solution 19 - ReactjsRubzenView Answer on Stackoverflow
Solution 20 - ReactjsLOVENEET SINGHView Answer on Stackoverflow
Solution 21 - Reactjsuser9085996View Answer on Stackoverflow
Solution 22 - ReactjsTanzeel AhmedView Answer on Stackoverflow
Solution 23 - ReactjsJames F. ThomasView Answer on Stackoverflow
Solution 24 - ReactjsEmyboyView Answer on Stackoverflow
Solution 25 - ReactjsAnuj TanwarView Answer on Stackoverflow