Así que tengo un proyecto de estudio visual creado con react.js.
Estoy tratando de vincular una imagen de forma dinámica, pero no lo logro. Este es el código que estoy probando:
En la parte superior, estoy configurando una variable para la primera parte de la ruta:
this.LogoPath = '../images/'
Y luego estoy capturando dinámicamente el nombre de la imagen de una llamada a la API.
this.setState({ imageNamePath: this.state.location.imageName })
Y luego los estoy concatenando:
{`${this.LogoPath}${this.state.location.imageName}`}
En la consola, obtengo:
img src='../images/the-images-name-here.png'
Entonces parece estar funcionando, pero no es así. No obtengo errores y tengo imágenes rotas. Mi mejor suposición es que reaccionar está cambiando las imágenes a algo como:
image-name-here.6a131799.png
Seguramente alguien se ha encontrado con esto antes, pero mi búsqueda en Google me ayudó un poco.
Entonces, ¿cómo consigo que se muestren las imágenes?
Webpack es una herramienta inteligente. Uno de sus puntos fuertes es la eliminación de archivos / códigos basura del paquete.
Eso significa que si un archivo no se importa usando import myFile from '../myPath/myFile.jpg';
o require ('../ myPath / myFile.jpg'); `no será parte del paquete final.
En su caso, no está importando el archivo. En su lugar, está creando una variable de cadena que no significa nada para el paquete web.
Hay diferentes opciones que podrían funcionar en su caso:
Opción 1: preimportar todas las imágenes y asignarlas en un objeto:
import React, {Component} from 'react';
import image1 from '../assets/image1.png';
import image2 from '../assets/image2.png';
import image3 from '../assets/image3.png';
const imageTypes = {
image1,
image2,
image3,
}
export default class MyComponent extends Component {
constructor(props) {
super(props);
this.state = {
imageType: 'image1'
}
}
render() {
return (
<img src={imageTypes[this.state.imageType]} />
)
}
}
Opción 2: No recomendado: use require para importar archivos dinámicamente (es posible que se necesiten configuraciones de paquete web para incluir todas las imágenes requeridas posibles en el paquete de producción):
class MyComponent {
constructor(props) {
super(props);
this.state = {
image: 'file1.png'
}
}
render() {
return (
<img src={require(`./assets/${this.state.image}`)} />
)
}
}
Opción 3: envíe la imagen de blob (en base64) desde la API.
Le sugiero que utilice la Opción 1 o la Opción 3 , según sus requisitos, tales como: con qué frecuencia se cambiarán / agregarán / eliminarán las imágenes. No es normal importar archivos dinámicamente desde el paquete ReactJS y puede terminar teniendo una imagen inexistente en su proyecto solicitada por los datos que provienen de una fuente externa.
Para la Opción 2 , también puede tener algunos problemas al configurar el paquete web para incluir en el paquete todas las imágenes que probablemente necesitará renderizar, aunque no se hayan importado (codificado) en algún lugar de los archivos JS. Tenga en cuenta que la aplicación React en producción termina siendo una colección de archivos estáticos. Deberá tratarlos de la siguiente manera.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras