Tengo algún problema con mis imágenes en mi proyecto de reacción. De hecho, siempre pensé que la ruta relativa al atributo src se basaba en la arquitectura de archivos
Aquí mi arquitectura de archivos:
components
file1.jsx
file2.jsx
file3.jsx
container
img
js
...
Sin embargo, me di cuenta de que el camino se basa en la url. En uno de mis componentes (por ejemplo, en file1.jsx) tengo esto:
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
¿Cómo es posible resolver este problema? Quiero que en cualquier forma de rutas manejadas por react-router, todas las imágenes se puedan mostrar con la misma ruta.
javascript
reactjs
webpack
onedkr
fuente
fuente
require
. Lea esta respuesta en SO para obtener más información.Respuestas:
Estás utilizando una URL relativa, que es relativa a la url actual, no al sistema de archivos. Puede resolver esto usando URL absolutas
<img src ="http://localhost:3000/details/img/myImage.png" />
Pero eso no es bueno para cuando se implementa en www.my-domain.bike o en cualquier otro sitio. Mejor sería usar una url relativa al directorio raíz del sitio
<img src="/details/img/myImage.png" />
fuente
/
que precededetails
(vs./details
, etc., para otros que pueden combinar los dos).reactjs
concordova
y utilizarES5
como eslint/images/popcorn.png
y no./images/popcorn.png
. Me funcionó con todas las rutas y esas cosas.En los
create-react-app
caminos relativos para las imágenes no parecen funcionar. En cambio, puede importar una imagen:fuente
import './styles/style.less'; **import logo from './styles/images/deadline.png';**
Recibo un error en el módulo de segunda línea no encontrado mientras la imagen existe y la ruta es correcta.Si usó create-react-app para crear su proyecto, entonces se puede acceder a su carpeta pública. Por lo tanto, debe agregar su
image
carpeta dentro de la carpeta pública.<img src="/images/logo.png" />
fuente
www.example.com/react-app
, la carpeta pública estará expuesta en www.example.com, sinreact-app
. Esto puede ser problemático, por lo que la respuesta aceptada es la correcta. Fuentes: agregar activos y usar la carpeta públicaCon
create-react-app
hay una carpeta pública (con index.html ...). Si coloca su "myImage.png" allí, digamos debajo de la subcarpeta img , puede acceder a ellos a través de:fuente
Haga una carpeta de imágenes dentro de src (/ src / images) Y mantenga su imagen en ella. Luego importe esta imagen en su componente (use su ruta relativa). Como abajo-
import imageSrc from './images/image-name.jpg';
Y luego en tu componente.
<img title="my-img" src={imageSrc} alt="my-img" />
Otra forma es mantener las imágenes en una carpeta pública e importarlas usando la ruta relativa. Para esto, haga una carpeta de imágenes en una carpeta pública y mantenga su imagen en ella. Y luego, en su componente, úselo como a continuación.
<img title="my-img" src='/images/my-image.jpg' alt="my-img" />
Ambos métodos funcionan pero se recomienda el primero porque su forma más limpia y las imágenes son manejadas por webpack durante el tiempo de construcción.
fuente
en mi caso, el siguiente código también funciona.
fuente
Algunas respuestas anteriores no funcionan, otras son buenas pero no explican el tema, en resumen:
Si la imagen está en el directorio 'público'
Ejemplo:
\public\charts\a.png
En html:
En JavaScript:
Crear imagen a nueva img, dinámicamente:
Establezca la imagen en img existente con id como 'img1', dinámicamente:
Si la imagen está en el directorio 'src':
Ejemplo:
\src\logo.svg
En JavaScript:
En jsx:
fuente
Agregando npm de cargador de archivos a webpack.config.js según sus instrucciones de uso oficiales de esta manera:
trabajó para mi.
fuente
Importar imágenes en su componente
Y llame al nombre de la imagen en la imagen src = {RecentProjectImage_3} como un objeto
fuente
Un amigo me mostró cómo hacer esto de la siguiente manera:
"./" funciona cuando el archivo que solicita la imagen (por ejemplo, "ejemplo.js") está en el mismo nivel dentro de la estructura de árbol de carpetas que la carpeta "imágenes".
fuente
Coloque el logotipo en su carpeta pública, por ejemplo, en public / img / logo.png y luego consulte la carpeta pública como% PUBLIC_URL%:
El uso de% PUBLIC_URL% en lo anterior se reemplazará con la URL de la
public
carpeta durante la compilación. Solo los archivos dentro de lapublic
carpeta pueden ser referenciados desde el HTML.A diferencia de "/img/logo.png" o "logo.png", "% PUBLIC_URL% / img / logo.png" funcionará correctamente tanto con el enrutamiento del lado del cliente como con una URL pública no root. Aprenda a configurar una URL pública no root ejecutando
npm run build
.fuente